gpt4 book ai didi

windows - 从 Windows 7 服务( session 0)读取 HID 设备时出现问题

转载 作者:可可西里 更新时间:2023-11-01 10:40:07 29 4
gpt4 key购买 nike

我在 Windows 7 的 Session 0 服务下读取 HID 设备时遇到问题。在普通桌面用户下,我可以从设备上正常读取。但是,当我尝试在 session 0 下使用重叠 I/O 读取它时,WaitForSingleObject() 总是返回 WAIT_TIMEOUT,并且 ReadFile 的缓冲区从不包含任何有效数据。这对我来说似乎是一个 Session 0 隔离问题,但我找不到任何关于如何解决这个问题的信息。从 HID 设备读取在 session 0 下是否不起作用?

谢谢。

最佳答案

void ImpersonateConsoleSession(DWORD dwSessionId)
{
PROCESSENTRY32 procEntry;
HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
procEntry.dwSize = sizeof(PROCESSENTRY32);
Process32First(hSnap, &procEntry);
DWORD winlogonPid = 0;
do {
if (!wcscmp(procEntry.szExeFile, L"winlogon.exe"))
{
DWORD winlogonSessId = 0;
if (ProcessIdToSessionId(procEntry.th32ProcessID, &winlogonSessId) && winlogonSessId == dwSessionId)
{
winlogonPid = procEntry.th32ProcessID;
break;
}
}
} while (Process32Next(hSnap, &procEntry) != 0);
CloseHandle(hSnap);
if (winlogonPid)
{
HANDLE hProcess = OpenProcess(MAXIMUM_ALLOWED, 0, winlogonPid);
HANDLE hPToken;
OpenProcessToken(hProcess, TOKEN_QUERY | TOKEN_DUPLICATE, &hPToken);
CloseHandle(hProcess);
HANDLE hUserTokenDup;
DuplicateTokenEx(hPToken, MAXIMUM_ALLOWED, 0, SecurityIdentification, TokenPrimary, &hUserTokenDup);
CloseHandle(hPToken);
ImpersonateLoggedOnUser(hUserTokenDup);
CloseHandle(hUserTokenDup);
}
}

然后使用 SQOS 参数打开您的设备:

ImpersonateConsoleSession(WTSGetActiveConsoleSessionId());
HANDLE hdevice = CreateFile(..., SECURITY_SQOS_PRESENT | SECURITY_IDENTIFICATION, 0);
RevertToSelf();

关于windows - 从 Windows 7 服务( session 0)读取 HID 设备时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4445442/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com