天天看点

常用系统信息API

1.窗口信息

    MS为我们提供了打开特定桌面和枚举桌面窗口的函数。

    hDesk=OpenDesktop(lpszDesktop,0,FALSE,DESKTOP_ENUMERATE);

    //打开我们默认的Default桌面;

    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);

    //获取账户的SID,以便获得账户的用户名称;

    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);

    //将进程的权限提升到支持调试(Debug);

    CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

    //创建进程的快照;

    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);

    //获取进程的IO使用情况;

    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.关机

    //调整进程令牌,使其支持关机;

    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);

    //获取Windows目录;

    GetSystemDirectory(szInfo,MAX_PATH+1);

    //获取系统目录;

继续阅读