日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

加载驱动程序

發布時間:2025/3/15 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 加载驱动程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一個KMD都需要創建設備和符號鏈接,它們分別為kernel和win32提供了名字,這樣kernel和win32就可以正確地使用KMD
相關例程 IoCreateDevice IoDeleteDevice IoCreateSymbolicLink IoDeleteSymbolicLink 查閱DDK文檔


/* driver.c */ #include <ntddk.h>#define FILE_DEVICE_HELLO 0x00008010/*函數聲明*/ VOID DriverUnload(PDRIVER_OBJECT DriverObject); /*DriverEntry例程*/ NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath) {UNICODE_STRING DeviceNameUnicodeString;UNICODE_STRING DeviceLinkUnicodeString;NTSTATUS ntStatus;PDEVICE_OBJECT DeviceObject = NULL;RtlInitUnicodeString (&DeviceNameUnicodeString, L"\\Device\\dload"); /*創建設備*/ntStatus = IoCreateDevice (DriverObject,0,&DeviceNameUnicodeString,FILE_DEVICE_HELLO,0,TRUE,&DeviceObject);if (NT_SUCCESS(ntStatus)){/*卸載例程*/DriverObject->DriverUnload = DriverUnload;/*創建符號鏈接*/RtlInitUnicodeString (&DeviceLinkUnicodeString, L"\\DosDevices\\dload");ntStatus = IoCreateSymbolicLink (&DeviceLinkUnicodeString,&DeviceNameUnicodeString);if (!NT_SUCCESS(ntStatus)){DbgPrint ("ERROR: IoCreateSymbolicLink failed");IoDeleteDevice (DeviceObject);}}else{DbgPrint ("ERROR: IoCreateDevice failed");}DbgPrint("dload");return ntStatus;} /*DriverUnload*/ VOID DriverUnload(PDRIVER_OBJECT DriverObject) {UNICODE_STRING DeviceLinkUnicodeString;NTSTATUS ntStatus;RtlInitUnicodeString (&DeviceLinkUnicodeString, L"\\DosDevices\\dload");ntStatus = IoDeleteSymbolicLink (&DeviceLinkUnicodeString);if (NT_SUCCESS(ntStatus)){IoDeleteDevice (DriverObject->DeviceObject);}else{DbgPrint ("ERROR: IoDeleteSymbolicLink");}}#include <windows.h> #include <Winsvc.h> #include <stdio.h>int main() {SC_HANDLE hSrvMgr; /*服務管理器句柄*/SC_HANDLE hSrvDrv;/*KMD服務名柄*/SERVICE_STATUS SvrSta;char szDir[256];DWORD dwSize;GetCurrentDirectory( dwSize, szDir );/*取當前目錄 */strcat(szDir,"\\dload.sys");LPCTSTR lpszBinaryPathName=TEXT(szDir);puts("任意鍵開始");getchar();hSrvMgr=OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS ); //打開服務控制管理器if(hSrvMgr){puts("打開服務管理器:成功!");}else{puts("打開服務管理器:失敗,任意鍵退出");getchar();exit(1);}puts("任意鍵繼續");getchar();hSrvDrv= CreateService( hSrvMgr,TEXT("dload"), //SYSTEM\CurrentControlSet\Services 驅動程序的在注冊表中的名字TEXT("dload"), // 注冊表驅動程序的 DisplayName 值SERVICE_ALL_ACCESS, // 加載驅動程序的訪問權限SERVICE_KERNEL_DRIVER,// 表示加載的服務是驅動程序SERVICE_DEMAND_START, // 注冊表驅動程序的 Start 值SERVICE_ERROR_IGNORE, // 注冊表驅動程序的 ErrorControl 值lpszBinaryPathName, // 注冊表驅動程序的 ImagePath 值NULL,NULL,NULL,NULL,NULL);if(hSrvDrv){puts("服務創建:成功!");}else{puts("服務創建:失敗,任意鍵退出");getchar();exit(1);}puts("任意鍵繼續");getchar();if(StartService( hSrvDrv, NULL, NULL )){puts("服務啟動:成功,KMD加載成功");}else{puts("服務啟動:失敗,任意鍵退出");getchar();exit(1);}puts("任意鍵繼續");getchar();if( ControlService(hSrvDrv, SERVICE_CONTROL_STOP , &SvrSta ) ){puts("服務停止:成功,KMD不工作");}else{puts("服務停止:失敗,需要重啟再次加載,任意鍵退出");getchar();exit(1);}puts("任意鍵繼續");getchar();if( DeleteService( hSrvDrv ) ){puts("服務卸載:成功");}else{puts("服務卸載:失敗,任意鍵退出");getchar();exit(1);}CloseServiceHandle( hSrvDrv );CloseServiceHandle( hSrvMgr );puts("任意鍵退出");getchar();return 0; }

轉載于:https://www.cnblogs.com/iwasmu/archive/2009/05/29/1491796.html

總結

以上是生活随笔為你收集整理的加载驱动程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。