diff --git a/src/OpenArkDrv/arkdrv-api/api-object/api-object.cpp b/src/OpenArkDrv/arkdrv-api/api-object/api-object.cpp index 6b67813..ca4ea11 100644 --- a/src/OpenArkDrv/arkdrv-api/api-object/api-object.cpp +++ b/src/OpenArkDrv/arkdrv-api/api-object/api-object.cpp @@ -229,14 +229,19 @@ bool GetSessions(std::vector &sinfos) typedef void (WINAPI *__WTSFreeMemory)( IN PVOID pMemory ); - __WTSEnumerateSessionsW pWTSEnumerateSessionsW = (__WTSEnumerateSessionsW)GetProcAddress(GetModuleHandleA("Wtsapi32.dll"), "WTSEnumerateSessionsW"); - __WTSFreeMemory pWTSFreeMemory = (__WTSFreeMemory)GetProcAddress(GetModuleHandleA("Wtsapi32.dll"), "WTSFreeMemory"); + HMODULE wts = GetModuleHandleA("Wtsapi32.dll"); + if (!wts) wts = LoadLibraryA("Wtsapi32.dll"); + __WTSEnumerateSessionsW pWTSEnumerateSessionsW = (__WTSEnumerateSessionsW)GetProcAddress(wts, "WTSEnumerateSessionsW"); + __WTSFreeMemory pWTSFreeMemory = (__WTSFreeMemory)GetProcAddress(wts, "WTSFreeMemory"); if (!pWTSEnumerateSessionsW || !pWTSFreeMemory) return false; DWORD scount = 0; PWTS_SESSION_INFOW sessions = NULL; BOOL ret = pWTSEnumerateSessionsW(WTS_CURRENT_SERVER_HANDLE, 0, 1, &sessions, &scount); - if (!ret) return false; + if (!ret) { + ERR(L"WTSEnumerateSessionsW err:%d", GetLastError()); + return false; + } for (int i = 0; i < scount; i++) { SESSION_INFOW info; @@ -276,7 +281,10 @@ bool ObjectSectionEnumR3(std::vector &items, ULONG sess udirname.MaximumLength = udirname.Length; InitializeObjectAttributes(&oa, &udirname, 0, NULL, NULL); status = pNtOpenDirectoryObject(&dirobj, DIRECTORY_QUERY, &oa); - if (!NT_SUCCESS(status)) return false; + if (!NT_SUCCESS(status)) { + ERR(L"NtOpenDirectoryObject status:%d", status); + return false; + } ULONG context, written; ULONG bufsize = 512; @@ -286,6 +294,7 @@ bool ObjectSectionEnumR3(std::vector &items, ULONG sess if (!NT_SUCCESS(status)) { CloseHandle(dirobj); free(info); + ERR(L"NtQueryDirectoryObject status:%d", status); return false; } while (NT_SUCCESS(pNtQueryDirectoryObject(dirobj, info, bufsize, TRUE, FALSE, &context, &written))) {