【问题标题】:In Visual Basic 6, Environ() function returns null value for CLIENTNAME在 Visual Basic 6 中,Environ() 函数为 CLIENTNAME 返回空值
【发布时间】:2018-09-12 14:17:10
【问题描述】:

我在 Visual Basic 6 中有一个旧应用程序,它使用 Environ() 函数来获取环境变量 CLIENTNAME。

函数不返回值。但是,如果我在 shell 中使用命令“SET CLIENTNAME”,我会得到正确的值。

如果用户被授予管理员权限,Environ() 工作正常,返回正确值,提示存在安全问题。

如果有任何建议,我将不胜感激。

【问题讨论】:

  • 应该在哪里设置 CLIENTNAME - 在控制面板、系统、高级、环境中,还是通过其他方式?您可以从可以看到它设置的 shell 运行您的 VB 应用程序吗?
  • 应用程序正在终端服务器客户端中运行。据我所知,CLIENTNAME 是自动加载并包含客户端计算机名称,而 COMPUTERNAME 包含服务器名称。

标签: windows vb6 environ


【解决方案1】:

您可以像这样使用 API 调用来获取当前 RDP 会话客户端名称

Option Explicit

'--- for WTSQuerySessionInformation
Private Const WTS_CURRENT_SERVER_HANDLE             As Long = 0
Private Const WTS_CURRENT_SESSION                   As Long = -1
Private Const WTSClientName                         As Long = 10

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)
Private Declare Function WTSQuerySessionInformation Lib "wtsapi32" Alias "WTSQuerySessionInformationA" (ByVal hServer As Long, ByVal SessionId As Long, ByVal WtsInfoClass As Long, ppBuffer As Long, pBytesReturned As Long) As Long
Private Declare Sub WTSFreeMemory Lib "wtsapi32" (ByVal pMemory As Long)

Private Function GetSessionClientName() As String
    Dim lPtr            As Long
    Dim lSize           As Long

    Call WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, WTSClientName, lPtr, lSize)
    If lPtr <> 0 Then
        GetSessionClientName = String$(lSize - 1, 0)
        Call CopyMemory(ByVal GetSessionClientName, ByVal lPtr, lSize - 1)
        Call WTSFreeMemory(lPtr)
    End If
End Function

Private Sub Form_Load()
    MsgBox "GetSessionClientName=[" & GetSessionClientName() & "]", vbExclamation
End Sub

【讨论】:

  • 谢谢,这个解决方案有效。但是,我仍然不知道为什么 Environ() 停止工作。
  • @JGarate 是否有人重新安装了带有 Windows Server 2016 的会话主机服务器?例如,对于在较新的操作系统版本/服务包中未标记为 TSAware 的 VB6 应用程序,可能是自动 appcompat 垫片。
猜你喜欢
  • 2012-05-11
  • 2019-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-25
  • 1970-01-01
相关资源
最近更新 更多