使用openscmanager函式開啟服務控制管理器(scm),獲得控制代碼.使用這個scm控制代碼建立(或者開啟)服務,服務執行載入驅動,服務停止解除安裝驅動
openscmanager //開啟裝置(服務)管理器
createservice //建立服務(或者裝置,根據引數不同而不同)
openservice //開啟裝置或者服務.
startservice //啟動服務,啟動裝置.
controlservice //控制裝置或者服務的狀態.
closeservicehandle //關閉服務或者裝置的控制代碼
deleteservice //解除安裝,刪除服務
//安裝驅動
void cmfcdriveloaddlg::onbnclickedmfcbuttoninstall()
//1. 使用openscmanager函式開啟scm
m_hservicemgr = openscmanager(null, null, sc_manager_all_access);
if (m_hservicemgr == null)
//2.使用createservice函式利用scm控制代碼建立乙個服務
m_hserviceddk = createservice(
m_hservicemgr,//smc控制代碼
_t("hadesservice"),//驅動服務名稱(驅動程式的在登錄檔中的名字)
_t("hadesservice"),//驅動服務顯示名稱(登錄檔驅動程式的displayname值)
service_all_access,//許可權(所有訪問許可權)
service_kernel_driver,//服務型別(驅動程式)
service_demand_start,//啟動方式(需要時啟動,登錄檔驅動程式的start值)
service_error_ignore,//錯誤控制(忽略,登錄檔驅動程式的errorcontrol值)
m_szpath_w,//服務的二進位制檔案路徑(驅動程式檔案路徑, 登錄檔驅動程式的imagepath值)
null,//載入組命令
null,//tagid(指向乙個載入順序的標籤值)
null,//依存關係
null,//服務啟動名
null);//密碼
if (m_hserviceddk == null)
closeservicehandle(m_hserviceddk);
closeservicehandle(m_hservicemgr);
getdlgitem(idc_static_prompt)->setwindowtext(_t("driver has been installed"));//設定控制項文字內容
}//載入驅動
void cmfcdriveloaddlg::onbnclickedmfcbuttonstart()
//使用openscmanager函式開啟scm
m_hservicemgr = openscmanager(null, null, sc_manager_all_access);
if (m_hservicemgr == null)
//開啟服務獲得控制代碼
m_hserviceddk = openservice(m_hservicemgr, _t("hadesservice"), service_start);
//啟動剛剛建立的服務
bool bret = startservice(m_hserviceddk, null, null);
if (bret == false)
closeservicehandle(m_hserviceddk);
closeservicehandle(m_hservicemgr);
getdlgitem(idc_static_prompt)->setwindowtext(_t("the driver has started"));//設定控制項文字內容
}//停止驅動
void cmfcdriveloaddlg::onbnclickedmfcbuttonstop()
//使用openscmanager函式開啟scm
m_hservicemgr = openscmanager(null, null, sc_manager_all_access);
if (m_hservicemgr == null)
//開啟服務獲得控制代碼
m_hserviceddk = openservice(m_hservicemgr, _t("hadesservice"), service_stop);
//停止驅動服務
service_status svcsta = ;
bool bret = controlservice(m_hserviceddk, service_control_stop, &svcsta);
if (bret == false)
closeservicehandle(m_hserviceddk);
closeservicehandle(m_hservicemgr);
getdlgitem(idc_static_prompt)->setwindowtext(_t("the drive has stopped"));//設定控制項文字內容
}//解除安裝驅動
void cmfcdriveloaddlg::onbnclickedmfcbuttonuninstall()
//使用openscmanager函式開啟scm
m_hservicemgr = openscmanager(null, null, sc_manager_all_access);
if (m_hservicemgr == null)
//開啟服務獲得控制代碼
m_hserviceddk = openservice(m_hservicemgr, _t("hadesservice"), service_stop | delete);
//刪除驅動服務
bool bret = deleteservice(m_hserviceddk);
if (bret == false)
getdlgitem(idc_static_prompt)->setwindowtext(_t("driver has been uninstalled"));//設定控制項文字內容
載入驅動測試截圖(驅動輸出了helloworld和遍歷了驅動模組被windbg捕獲):
1 程式設計實現載入驅動
win64驅動模板 0 包含的標頭檔案。可以加入系統或自己定義的標頭檔案 include include include 1 定義符號鏈結,一般來說修改為驅動的名字即可 define device name l device krnlhw64 define link name l dosdevice...
手動載入NT式驅動 非工具 修改登錄檔實現
手動載入nt式驅動 非工具 a 觀察登錄檔 b 手動執行驅動 c 手動停止驅動 執行 regedit.exe hkey local machine system currentcontrolset services imagepath g 驅動教程 018 讀出ssdt表當前函式位址 mini dd...
載入LSI驅動
如是是64位系統,則解壓其中的megaraid sas v00.00.04.37 k2.6.32 21 server.amd64.gz,得到megaraid sas v00.00.04.37 k2.6.32 21 server.amd64檔案,把這個檔案加上字尾.zip 再次解壓就會得到下面所用用到...