GetWindowsDirectory 和 GetSystemWindowsDirectory 之间的区别?

c00*_*0fd 5 c++ winapi terminal-services

我正在尝试测试GetWindowsDirectoryGetSystemWindowsDirectory API 在控制台上并通过远程连接返回的不同系统路径。根据文档:

对于终端服务,GetSystemWindowsDirectory 函数检索系统 Windows 目录的路径,而 GetWindowsDirectory 函数检索每个用户专用的 Windows 目录的路径。在单用户系统上,GetSystemWindowsDirectory 与 GetWindowsDirectory 相同。

我似乎看不出有什么区别。它们都返回“C:\Windows”。

有人可以解释为什么我看不到终端服务宣布的文档吗?

编辑:这是我正在运行的一个小 C++ 代码示例:

//Check if RDP session
BOOL bRDP = FALSE;
DWORD dwSessID = -1;
::ProcessIdToSessionId(::GetCurrentProcessId(), &dwSessID);
DWORD dwSz;
LPTSTR ppBuffer = NULL;
if(WTSQuerySessionInformation(NULL, dwSessID, WTSClientProtocolType, &ppBuffer, &dwSz))
{
    bRDP = *(USHORT*)ppBuffer == 2;
    WTSFreeMemory(ppBuffer);
}

_tprintf(_T("%s\n"), !bRDP ? _T("Console Session") : _T("RDP Session"));

//Get system folder
TCHAR buff[MAX_PATH * 2];

buff[0] = 0;
GetSystemWindowsDirectory(buff, SIZEOF(buff));
_tprintf(_T("Sysfolder1: %s\n"), buff);

buff[0] = 0;
GetWindowsDirectory(buff, SIZEOF(buff));
_tprintf(_T("Sysfolder2: %s\n"), buff);
Run Code Online (Sandbox Code Playgroud)

这是我从远程桌面会话获得的输出:

RDP Session
Sysfolder1: C:\WINDOWS
Sysfolder2: C:\WINDOWS
Run Code Online (Sandbox Code Playgroud)

c00*_*0fd 4

感谢@RaymondChen 和@Stefan,只有在应用程序设置中指定/TSAWARE:NO链接器选项时,您才会看到输出中的差异: 在此输入图像描述

在这种情况下我得到了这个输出:

RDP Session
Sysfolder1: C:\WINDOWS
Sysfolder2: C:\Documents and Settings\RemoteUserA\WINDOWS
Run Code Online (Sandbox Code Playgroud)