由於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,乙個基本優先順序,乙個退出 檔案物件則有乙個位元組位移,乙個共享模式,乙個開啟模式 如果核心控制代碼傳遞給另外乙個程序,那麼這另...