一般在windows編程都是用用從ntdll導出的Native API,現在看到一點COM編程或者其他的一些不常用的接口函數總覺得蠻有意思,准備以后多積累一下。
先簡單總結WTSAPI32。以下實在Win7x64下的WTSAPI32中得到的導出函數。
WTSCloseServer 0x3fd03292 0x00003292 1 (0x1) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSConnectSessionA 0x3fd02f38 0x00002f38 2 (0x2) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSConnectSessionW 0x3fd02fc1 0x00002fc1 3 (0x3) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSCreateListenerA 0x3fd07c11 0x00007c11 4 (0x4) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSCreateListenerW 0x3fd07595 0x00007595 5 (0x5) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSDisconnectSession 0x3fd02992 0x00002992 6 (0x6) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSEnumerateListenersA 0x3fd071ea 0x000071ea 7 (0x7) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSEnumerateListenersW 0x3fd070d4 0x000070d4 8 (0x8) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSEnumerateProcessesA 0x3fd0542d 0x0000542d 9 (0x9) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSEnumerateProcessesExA 0x3fd057e2 0x000057e2 10 (0xa) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSEnumerateProcessesExW 0x3fd05138 0x00005138 11 (0xb) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSEnumerateProcessesW 0x3fd04e45 0x00004e45 12 (0xc) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSEnumerateServersA 0x3fd03577 0x00003577 13 (0xd) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSEnumerateServersW 0x3fd03461 0x00003461 14 (0xe) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSEnumerateSessionsA 0x3fd04023 0x00004023 15 (0xf) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSEnumerateSessionsExA 0x3fd04485 0x00004485 16 (0x10) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSEnumerateSessionsExW 0x3fd04359 0x00004359 17 (0x11) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSEnumerateSessionsW 0x3fd01d49 0x00001d49 18 (0x12) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSFreeMemory 0x3fd01b65 0x00001b65 19 (0x13) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSFreeMemoryExA 0x3fd03179 0x00003179 20 (0x14) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSFreeMemoryExW 0x3fd030cd 0x000030cd 21 (0x15) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSGetListenerSecurityA 0x3fd0706d 0x0000706d 22 (0x16) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSGetListenerSecurityW 0x3fd06ec1 0x00006ec1 23 (0x17) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSLogoffSession 0x3fd03d77 0x00003d77 24 (0x18) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSOpenServerA 0x3fd03262 0x00003262 25 (0x19) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSOpenServerExA 0x3fd03282 0x00003282 26 (0x1a) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSOpenServerExW 0x3fd03272 0x00003272 27 (0x1b) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSOpenServerW 0x3fd03252 0x00003252 28 (0x1c) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSQueryListenerConfigA 0x3fd074ec 0x000074ec 29 (0x1d) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSQueryListenerConfigW 0x3fd072cc 0x000072cc 30 (0x1e) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSQuerySessionInformationA 0x3fd04cdd 0x00004cdd 31 (0x1f) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSQuerySessionInformationW 0x3fd0253d 0x0000253d 32 (0x20) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSQueryUserConfigA 0x3fd0695c 0x0000695c 33 (0x21) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSQueryUserConfigW 0x3fd0662a 0x0000662a 34 (0x22) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSQueryUserToken 0x3fd01f81 0x00001f81 35 (0x23) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSRegisterSessionNotification 0x3fd01cbc 0x00001cbc 36 (0x24) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSRegisterSessionNotificationEx 0x3fd03e0a 0x00003e0a 37 (0x25) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSSendMessageA 0x3fd03d1f 0x00003d1f 38 (0x26) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSSendMessageW 0x3fd03cc7 0x00003cc7 39 (0x27) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSSetListenerSecurityA 0x3fd06e60 0x00006e60 40 (0x28) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSSetListenerSecurityW 0x3fd06d36 0x00006d36 41 (0x29) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSSetSessionInformationA 0x3fd03cbc 0x00003cbc 42 (0x2a) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSSetSessionInformationW 0x3fd03cbc 0x00003cbc 43 (0x2b) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSSetUserConfigA 0x3fd06383 0x00006383 44 (0x2c) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSSetUserConfigW 0x3fd06008 0x00006008 45 (0x2d) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSShutdownSystem 0x3fd031eb 0x000031eb 46 (0x2e) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSStartRemoteControlSessionA 0x3fd02ec2 0x00002ec2 47 (0x2f) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSStartRemoteControlSessionW 0x3fd02e9e 0x00002e9e 48 (0x30) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSStopRemoteControlSession 0x3fd02e81 0x00002e81 49 (0x31) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSTerminateProcess 0x3fd05119 0x00005119 50 (0x32) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSUnRegisterSessionNotification 0x3fd028c8 0x000028c8 51 (0x33) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSUnRegisterSessionNotificationEx 0x3fd03e6b 0x00003e6b 52 (0x34) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSVirtualChannelClose 0x3fd058cb 0x000058cb 53 (0x35) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSVirtualChannelOpen 0x3fd05c1b 0x00005c1b 54 (0x36) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSVirtualChannelOpenEx 0x3fd05c39 0x00005c39 55 (0x37) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSVirtualChannelPurgeInput 0x3fd05ad9 0x00005ad9 56 (0x38) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSVirtualChannelPurgeOutput 0x3fd05afb 0x00005afb 57 (0x39) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSVirtualChannelQuery 0x3fd05b1d 0x00005b1d 58 (0x3a) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSVirtualChannelRead 0x3fd05997 0x00005997 59 (0x3b) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSVirtualChannelWrite 0x3fd05920 0x00005920 60 (0x3c) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數 WTSWaitSystemEvent 0x3fd02fe5 0x00002fe5 61 (0x3d) wtsapi32.dll C:\Windows\SysWOW64\wtsapi32.dll 導出函數
根據函數名稱大概也可以看出函數的功能,常用函數的實現,都能查得到。
這里用WTSEnumerateProcessesA做個demo。
進程枚舉
1 #include "stdafx.h" 2 #include "stdafx.h" 3 #include "stdio.h" 4 #include "windows.h" 5 typedef struct _WTS_PROCESS_INFO { 6 DWORD SessionId; 7 DWORD ProcessId; 8 LPTSTR pProcessName; 9 PSID pUserSid; 10 } WTS_PROCESS_INFO, *PWTS_PROCESS_INFO; 11 12 typedef HANDLE(WINAPI* WTSOPENSERVER)(LPTSTR pServerName); 13 typedef BOOL(WINAPI* WTSENUMERATEPROCESSES)(HANDLE hServer, DWORD Reserved, DWORD Version, \ 14 PWTS_PROCESS_INFO* ppProcessInfo, DWORD* pCount); 15 16 void main() 17 { 18 HMODULE hWtsApi32 = LoadLibrary(_T("WTSAPI32.DLL")); 19 WTSOPENSERVER pWtsOpenServer = (WTSOPENSERVER)GetProcAddress(hWtsApi32, "WTSOpenServerA"); 20 WTSENUMERATEPROCESSES wtsEnumProc = (WTSENUMERATEPROCESSES)GetProcAddress(hWtsApi32, "WTSEnumerateProcessesA"); 21 WCHAR *szServerName = _T(""); 22 HANDLE hServer = pWtsOpenServer((LPTSTR)szServerName); 23 PWTS_PROCESS_INFO pProcInfo; 24 DWORD dwCount = 0; 25 if (!wtsEnumProc(hServer, 0, 1, &pProcInfo, &dwCount)) 26 return; 27 for (DWORD i = 0; i < dwCount; i++) 28 { 29 wprintf(_T("ProcID=0x%XH ProName=%S\r\n"), pProcInfo[i].ProcessId, pProcInfo[i].pProcessName); 30 } 31 }
WTSRegisterSessionNotification進行注冊以接收WM_WTSSESSION_CHANGE 消息,這個函數只是看到了,自己暫時還沒有用到的時候。先把資料放着吧。
https://support.microsoft.com/en-us/help/310153/how-to-write-an-application-that-supports-fast-user-switching-in-windows-xp