设为首页 收藏本站
查看: 645|回复: 0

[经验分享] 获取信息的有关Windows API

[复制链接]

尚未签到

发表于 2018-6-27 06:48:23 | 显示全部楼层 |阅读模式
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,>  // 获取系统性能信息;
  9.进程/线程/模块信息
  在此我们使用工具帮助函数(ToolHelp32)和系统
  OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY │ TOKEN_ADJUST_PRIVILEGES, &hToken);
  // 打开进程的令牌,提升权限;

  AdjustTokenPrivileges(hToken, FALSE, &TokenPrivileges,>  // 将进程的权限提升到支持调试(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,>  // 获取进程的存储区信息;
  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,>  // 调整进程令牌,使其支持关机;
  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);
  // 获取系统目录;
  ==========================================================
  ____________________________________________________________________________________

  来自:sky1000, 时间:2004-11-24 12:38:10,>  ____________________________________________________________________________________
  1、先声明下面一个函数:
  function SHFormatDrive(Hwnd:HWND;Drive:Integer;Size:Uint;Action:Integer):Integer;
  stdcall;external 'shell32.dll' name 'SHFormatDrive';
  说明:1、Hwnd:窗口所有者的句柄
  2、Drive:所有格式化的对象:0指a驱;1指b驱;2指c盘...
  3、Size:暂时无用
  4、Action:0:快速格式化;1:全面格式化;2:格式化时传送系统,即:sys a(b,c)
  2、上述函数参数太多,可以再次进行包装即:
  function FormatDrive(Drive,Action:Integer):Integer;
  begin
  Result:=SHFormatDrive(Application.Handle,Drive,0,Action);
  end;
  说明:只需要填写两个参数
  3、用法:
  1、快速格式化A盘: FormatDrive(0,0);
  2、全面格式化A盘: FormatDrive(1,0);
  3、格式化A盘时带系统: FormatDrive(2,0);
  implementation
  {$R *.DFM}
  function SHFormatDrive(Hwnd:HWND;Drive:Integer;Size:Uint;Action:Integer):Integer;
  stdcall;external 'shell32.dll' name 'SHFormatDrive';
  function FormatDrive(Drive,Action:Integer):Integer;
  begin
  Result:=SHFormatDrive(Application.Handle,Drive,0,Action);
  end;
  procedure TForm1.Button1Click(Sender: TObject);
  begin
  FormatDrive(5,0);
  end;

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-531093-1-1.html 上篇帖子: windows蓝屏信息大全 下篇帖子: windows 2008 ftp配置及用户权限管理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表