1.窗口信息 MS为我们提供了打开特定桌面和枚举桌面窗口的函数。 hDesk = OpenDesktop(lpszDesktop, 0, FALSE, DESKTOP_ENUMERATE);
EnumDesktopWindows(hDesk,(WNDENUMPROC)EnumWindowProc, 0);
BOOL __stdcall EnumWindowProc(HWND, LPARAM);
GetWindowText(hWnd, szWindowText, dwMaxCount); GetWindowThreadProcessId(hWnd, &dwPID);
2.设备驱动器信息(服务和设备驱动器差不多,在此不做重复) 设备驱动信息有服务控制管理器(SCM)来管理的,我要打开服务控制管理器,并枚举所有的设备驱动器。 OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
EnumServicesStatus(schManager, dwDeviceType, dwDeviceState, EnumStatus, dwBufSize, &dwBytesNeeded, &dwDevicesReturned, &dwResumeHandle))
CloseServiceHandle(schManager);
OpenService(schManager, szDeviceName, SERVICE_ALL_ACCESS);
QueryServiceConfig(schDevice, lpDeviceConfig, 1024 * 8, &dwBytesNeeded);
QueryServiceStatus(schDevice, &DeviceStatus);
QueryServiceConfig2(schDevice, SERVICE_CONFIG_DESCRIPTION, (LPBYTE)lpDeviceDescription, 8*1024, &dwBytesNeeded)
StartService(schDevice, 0, NULL);
ControlService(schDevice, SERVICE_CONTROL_STOP, &DeviceStatus);
DeleteService(schDevice);
3.磁盘信息 我们希望获得系统所有磁盘的信息,包括软盘,硬盘,光盘等等; GetLogicalDriveStrings(dwBufferLength, lpBuffer);
GetVolumeInformation(lpRootPathName, lpVolumeNameBuffer, dwVolumeNameSize, &dwVolumeSerialNumber, &dwMaximumComponentLength, &dwFileSystemFlags, lpFileSystemNameBuffer, dwFileSystemNameSize);
GetDiskFreeSpaceEx(lpRootPathName, &FreeBytesAvailable, &TotalNumberOfBytes, &TotalNumberOfFreeBytes);
4.环境变量 我们可以从注册表中获得环境块的信息:HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/Environment,当然要使用注册表的函数。 RegOpenKeyEx(HKEY_LOCAL_MACHINE, RegKey, 0, KEY_QUERY_VALUE, &hKey);
RegEnumValue(hKey, dwIndex, EnvironVariable, &dwVariableLength, NULL, NULL, NULL, NULL);
GetEnvironmentVariable(EnvironVariable, EnvironString, 1024);
5.事件记录信息 OpenEventLog(NULL, szLog);
GetOldestEventLogRecord(hEvent, &dwThisRecord);
ReadEventLog(hEvent, EVENTLOG_FORWARDS_READ │ EVENTLOG_SEQUENTIAL_READ, 0, pEventLogRecord, 1024 * 32, &dwRead, &dwNeeded);
LookupAccountSid(NULL, pSid, szName, &dwName, szDomain, &dwDomain, &SNU);
GetNumberOfEventLogRecords(hEvent, &dwTotal);
CloseEventLog(hEvent);
6.网络共享 我们使用第二等级的网络共享搜索; NetShareEnum(NULL, dwLevel,(PBYTE *)&pBuf, MAX_PREFERRED_LENGTH, &entriesread, &totalentries, &resume);
NetApiBufferFree(pBuf);
NetShareDel(NULL, (char *)lpShareNameW, 0);
7.网络适配器信息 我们要探测NIC的信息和网络流量; GetAdaptersInfo(&AdapterInfo, &OutBufLen);
8.系统性能 获取系统的存储器使用情况; GetPerformanceInfo(&PerfInfo, sizeof(PERFORMACE_INFORMATION))
9.进程/线程/模块信息 在此我们使用工具帮助函数(ToolHelp32)和系统 OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY │ TOKEN_ADJUST_PRIVILEGES, &hToken);
AdjustTokenPrivileges(hToken, FALSE, &TokenPrivileges, sizeof(TOKEN_PRIVILEGES), NULL, NULL);
CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
Process32First(hProcessSnap, &ProcessEntry32); Process32First(hProcessSnap, &ProcessEntry32);
OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, ProcessEntry32.th32ProcessID);
GetProcessTimes(hProcess, &CreateTime, &ExitTime, &KernelTime, &UserTime);
GetProcessMemoryInfo(hProcess, &PMCounter, sizeof(PMCounter));
GetPriorityClass(hProcess);
GetProcessIoCounters(hProcess, &IoCounters);
CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessID);
Module32First(hModuleSnap, &ModuleEntry32); Module32Next(hModuleSnap, &ModuleEntry32);
CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
Thread32First(hThreadSnap, &ThreadEntry32); Thread32Next(hThreadSnap, &ThreadEntry32);
OpenThread(THREAD_ALL_ACCESS, FALSE, ThreadEntry32.th32ThreadID);
TerminateProcess(hProcess,0);
SuspendThread(hThread);
ResumeThread(hThread);
10.关机 AdjustTokenPrivileges(hToken, FALSE, &TokenPrivileges, sizeof(TOKEN_PRIVILEGES), NULL, NULL);
ExitWindowsEx(EWX_LOGOFF, 0);
LockWorkStation();
InitiateSystemShutdown(NULL, szMessage, dwTimeout, FALSE, bSig);
SetSystemPowerState(bSig, FALSE);
11.用户信息 NetUserEnum(NULL, dwLevel, FILTER_NORMAL_ACCOUNT, (LPBYTE*)&pBuf, dwPrefMaxLen, &dwEntriesRead, &dwTotalEntries, &dwResumeHandle);
NetUserDel(NULL, lpUserNameW);
12.系统版本信息 GetVersionEx((LPOSVERSIONINFO)&osviex);
我们也可以通过注册表(HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion)获取相关信息: GetTickCount();
GetComputerName(szInfo, &dwInfo);
GetUserName(szInfo, &dwInfo);
GetWindowsDirectory(szInfo, MAX_PATH + 1);
GetSystemDirectory(szInfo, MAX_PATH + 1);
 
|