宝峰科技

 找回密码
 注册

QQ登录

只需一步,快速开始

智能终端设备维修查询系统注册会员邮箱认证须知!
查看: 3273|回复: 0

[Delphi三方工具] 获取信息的有关Windows API

[复制链接]
  • TA的每日心情
    开心
    2024-12-9 18:45
  • 签到天数: 124 天

    [LV.7]常住居民III

    admin 发表于 2009-10-29 19:51:39 | 显示全部楼层 |阅读模式

    欢迎您注册加入!这里有您将更精采!

    您需要 登录 才可以下载或查看,没有账号?注册

    x
    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);
    // 获取系统目录;
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    免责声明

    本站中所有被研究的素材与信息全部来源于互联网,版权争议与本站无关。本站所发布的任何软件编程开发或软件的逆向分析文章、逆向分析视频、补丁、注册机和注册信息,仅限用于学习和研究软件安全的目的。全体用户必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。学习编程开发技术或逆向分析技术是为了更好的完善软件可能存在的不安全因素,提升软件安全意识。所以您如果喜欢某程序,请购买注册正版软件,获得正版优质服务!不得将上述内容私自传播、销售或者用于商业用途!否则,一切后果请用户自负!

    QQ|Archiver|手机版|小黑屋|联系我们|宝峰科技 ( 滇公网安备 53050202000040号 | 滇ICP备09007156号-2 )

    Copyright © 2001-2023 Discuz! Team. GMT+8, 2024-12-23 01:50 , File On Powered by Discuz! X3.49

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