zoukankan      html  css  js  c++  java
  • 常用系统信息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);
        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.关机
        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);
        //获取Windows目录;
        GetSystemDirectory(szInfo,MAX_PATH+1);
        //获取系统目录;
  • 相关阅读:
    龙井和碧螺春的功效与作用
    064 01 Android 零基础入门 01 Java基础语法 08 Java方法 02 无参带返回值方法
    063 01 Android 零基础入门 01 Java基础语法 08 Java方法 01 无参无返回值方法
    062 01 Android 零基础入门 01 Java基础语法 07 Java二维数组 01 二维数组应用
    061 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 08 一维数组总结
    060 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 07 冒泡排序
    059 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 06 增强型for循环
    058 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 05 案例:求数组元素的最大值
    057 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 04 案例:求整型数组的数组元素的元素值累加和
    056 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 03 一维数组的应用
  • 原文地址:https://www.cnblogs.com/hantianwei/p/1674427.html
Copyright © 2011-2022 走看看