首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

Windows 核心資訊獲取 API 速查:視窗、裝置驅動、服務全覽

     編輯:VC 教學

一、視窗枚舉與資訊獲取

桌面與視窗枚舉

// 開啟預設桌面
HDESK hDesk = OpenDesktop("Default", 0, FALSE, DESKTOP_ENUMERATE);

// 枚舉桌面上所有視窗,回調函數處理
EnumDesktopWindows(hDesk, (WNDENUMPROC)EnumWindowProc, 0);

回調函數原型與關鍵 API

BOOL CALLBACK EnumWindowProc(HWND hWnd, LPARAM lParam)
{
    // 1. 取得視窗標題
    TCHAR szTitle[256];
    GetWindowText(hWnd, szTitle, 256);

    // 2. 取得進程/執行緒 ID
    DWORD dwPID, dwTID;
    dwTID = GetWindowThreadProcessId(hWnd, &dwPID);

    // 3. 判斷可見性、樣式等
    if (IsWindowVisible(hWnd) && (GetWindowLong(hWnd, GWL_STYLE) & WS_VISIBLE))
        ; // 處理邏輯

    return TRUE; // 繼續枚舉
}

二、裝置驅動/服務資訊查詢(SCM 架構)

服務控制管理器 (SCM) 統一管理服務與核心模式驅動。

開啟 SCM 並枚舉驅動

SC_HANDLE hSCM = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);

DWORD dwBytesNeeded, dwReturned, dwResume = 0;
ENUM_SERVICE_STATUS *pEnum = NULL;
DWORD dwBufSize = 0;

// 先查所需緩衝區大小
EnumServicesStatus(hSCM, SERVICE_DRIVER, SERVICE_STATE_ALL,
                   NULL, 0, &dwBytesNeeded, &dwReturned, &dwResume);

pEnum = (ENUM_SERVICE_STATUS*)LocalAlloc(LPTR, dwBytesNeeded);
EnumServicesStatus(hSCM, SERVICE_DRIVER, SERVICE_STATE_ALL,
                   pEnum, dwBufSize, &dwBytesNeeded, &dwReturned, &dwResume);

// 遍歷 pEnum[0..dwReturned-1] 取得服務名、顯示名、狀態
LocalFree(pEnum);

查詢單一驅動詳細配置

SC_HANDLE hSvc = OpenService(hSCM, szDriverName, SERVICE_ALL_ACCESS);

// 1. 服務配置(啟動類型、二進位路徑、錯誤控制等)
QUERY_SERVICE_CONFIG *pConfig = (QUERY_SERVICE_CONFIG*)LocalAlloc(LPTR, 8192);
QueryServiceConfig(hSvc, pConfig, 8192, &dwBytesNeeded);

// 2. 即時狀態(目前狀態、檢查點、等待提示等)
SERVICE_STATUS_PROCESS ssp;
QueryServiceStatusEx(hSvc, SC_STATUS_PROCESS_INFO, 
                     (LPBYTE)&ssp, sizeof(ssp), &dwBytesNeeded);

// 3. 描述字串(需 Win2000+)
LPQUERY_SERVICE_CONFIG2 pDesc = (LPQUERY_SERVICE_CONFIG2)LocalAlloc(LPTR, 8192);
QueryServiceConfig2(hSvc, SERVICE_CONFIG_DESCRIPTION, 
                    (LPBYTE)pDesc, 8192, &dwBytesNeeded);

清理資源

CloseServiceHandle(hSvc);
CloseServiceHandle(hSCM);

常用服務/驅動類型常數

常數值說明
SERVICE_KERNEL_DRIVER0x00000001核心模式驅動
SERVICE_FILE_SYSTEM_DRIVER0x00000002檔案系統驅動
SERVICE_WIN32_OWN_PROCESS0x00000010獨立進程服務
SERVICE_WIN32_SHARE_PROCESS0x00000020共享進程服務

三、實用提示

  • 權限:需管理員權限才能 SC_MANAGER_ALL_ACCESS 與 SERVICE_ALL_ACCESS。
  • Unicode:建議使用 OpenSCManagerW、QueryServiceConfigW 等寬字元版本。
  • 遠端:OpenSCManager("\\\\RemoteHost", ...) 可管理遠端機器(需 RPC/RPCSS 服務)。
  • 驅動啟動類型:SERVICE_BOOT_START(0), SERVICE_SYSTEM_START(1), SERVICE_AUTO_START(2), SERVICE_DEMAND_START(3), SERVICE_DISABLED(4)。

SCM 服務管理架構圖

掌握這組 API,即可構建系統監控、驅動管理、安全審計等工具的核心資料蒐集層。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved