Windows核心程式設計(二)核心驅動執行,除錯

2021-10-08 17:07:13 字數 3211 閱讀 1960

由於windows數字簽名的原因,沒有簽名或者使用測試簽名的都不能放到64位系統上執行。

兩個解決辦法。

一、將系統設定為除錯模式

二、關閉系統的驅動簽名校驗。

服務管理器:管理系統上的所有服務,建立、註冊、修改、啟動服務。

所以我們編寫程式的時候,首先要開啟服務管理器。其api為:

sc_handle winapi openscmanager

( lpctstr lpmachinename,

//字串常量,表示機器名字,傳null就是本機器

lpctstr lpdatebasename,

//同,資料庫的名字,null代表開啟的是活動資料庫

dword dwdesiredaccess //許可權

);

許可權一般有 sc_manager_create_service 建立服務

sc_manager_enumerate_service 列舉服務

sc_manager_all_access 一切許可權

函式的返回值是乙個sc_handle 為服務管理器的控制代碼

關閉控制代碼的函式

closeservicehandle

(sc_handle param)

;

建立乙個服務使用的函式

sc_handle winapi createservice

( sc_handle hscmanager,

//服務管理器控制代碼

lpctstr lpservicename,

//建立的服務名字,唯一性

lpctstr lpdisplayname,

//服務的顯示名字,不唯一

dword dwdesiredaccess,

//服務的許可權,見下方

dword dwservicetype,

//建立何種型別的服務,見下方

dword dwstarttype,

//服務的啟動方式

dword dwerrorcontrol,

//錯誤控制

lpctstr lpbinarypathname,

//服務對應的可執行檔案的全路徑,也就是sys檔案路徑

lpctstr lploadordergroup,

//服務所在分組的名字

lpdword lpdwtagid,

//分組內該服務的啟動順序

lpctstr lpdependencies,

//需要依賴其他服務名的列表

lpctstr lpservicestartname,

//加上下面那個,表示以什麼身份啟動服務

lpctstr lppassword

)

開啟服務使用的函式

sc_handle winapi openservice

( sc_handle hscmanager,

lpctstr lpservicename,

dword dwdesiredaccess

);

返回的是這個服務的控制代碼。

服務的啟動與停止

bool winapi startservice

( sc_handle hservice,

dword dwnumserviceargs,

//啟動所傳的引數

lpctstr *lpservicear**ectors

)

停止、暫停、恢復服務

bool winapi controlservice

( sc_handle hservice,

dword dwcontrol,

//控制碼,表示需要對服務進行何種操作

lpservice_status lpservicestatus //返回引數,表示服務當前最新狀態

)

服務的刪除

bool winapi deleteservice

( sc_handle hservice

)

服務建立開啟並執行程式示例:

#include

#include

#define ser_name text("firstdriver")

intmain()

hser =

createservice

( hscm,

ser_name,

ser_name,

service_all_access,

service_kernel_driver,

service_demand_start,

service_error_ignore,

text

("路徑"),

null

,null

,null

,null

,null);

if(hser ==

null)}

else

}printf

("createservuce or openservice success\n");

getchar()

;//準備啟動

bool bsucc =

startservice

(hser,

null

,null);

printf

("startservice:%u\n"

, bsucc)

;getchar()

; service_status serstatus =

; bsucc =

controlservice

(hser, service_control_stop,

&serstatus)

;printf

("controlservice:%u\n"

, bsucc)

;getchar()

;//刪除服務

deleteservice

(hser);}

while

(false)

;//類似於goto語句,防止**冗餘

if(hscm !=

null)if

(hser !=

null

)return0;

}

WINDOWS核心程式設計 核心物件

今天想把看的第三章的心得寫下來。這章主要介紹了核心物件。在windows中,核心物件是由作業系統來管理,儘管使用者能夠建立它,但是在建立之後,使用者對該核心物件的操作都是委託給作業系統。通常使用者建立和使用的物件分為 使用者物件 如 hicon createicon prama gdi物件函式以及核...

Windows核心程式設計 核心物件

每個核心物件只是核心分配的乙個記憶體塊,只能由核心訪問.該記憶體塊是一種資料結構,它的成員負責維護物件的各種資訊,由得物件型別相同,但大多數不同,比如程序物件有個程序id,乙個基本優先順序,乙個退出 檔案物件則有乙個位元組位移,乙個共享模式,乙個開啟模式 如果核心控制代碼傳遞給另外乙個程序,那麼這另...

Windows核心程式設計 核心物件

每個核心物件只是核心分配的乙個記憶體塊,只能由核心訪問.該記憶體塊是一種資料結構,它的成員負責維護物件的各種資訊,由得物件型別相同,但大多數不同,比如程序物件有個程序id,乙個基本優先順序,乙個退出 檔案物件則有乙個位元組位移,乙個共享模式,乙個開啟模式 如果核心控制代碼傳遞給另外乙個程序,那麼這另...