阅读:1312回复:2
为什么我调用IoCreateDevice创建不一个磁盘?
为什么我调用IoCreateDevice创建不一个磁盘?
#include "precomp.h" NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject,IN PUNICODE_STRING pRegistryPath) { ULONG ulDeviceNumber=0; NTSTATUS status; HANDLE Handle; status=CreateDevice(pDriverObject,ulDeviceNumber); if(!NT_SUCCESS(status)) { DbgPrint("create device fail"); return status; } pDriverObject->DriverUnload=DriverUnload; pDriverObject->MajorFunction[IRP_MJ_CREATE]=dispCreate; pDriverObject->MajorFunction[IRP_MJ_CLOSE]=dispClose; pDriverObject->MajorFunction[IRP_MJ_WRITE]=dispWrite; pDriverObject->MajorFunction[IRP_MJ_READ]=dispRead; PsCreateSystemThread(&Handle,THREAD_ALL_ACCESS ,NULL, NULL, NULL, (PKSTART_ROUTINE)test, NULL); return status; } void test(void **arg) { while(1) { DbgPrint("hello world!"); NdisMSleep(5*1000000); } } NTSTATUS CreateDevice(IN PDRIVER_OBJECT pDriverObject,IN ULONG ulDeviceNumber) { NTSTATUS status; PDEVICE_OBJECT pDevObj; PDEVICE_EXTENSION pDevExt; OBJECT_ATTRIBUTES objattr; HANDLE dirhandle; PUNICODE_STRING pUniStr=CharToUnicode("\\Device"); PUNICODE_STRING devname=CharToUnicode("\\Device\\RamDisk"); DbgPrint("haha!I am runing!"); NdisMSleep(5*1000000); InitializeObjectAttributes(&objattr,pUniStr,OBJ_PERMANENT,0,0); ZwCreateDirectoryObject(&dirhandle,DIRECTORY_ALL_ACCESS,&objattr); ZwMakeTemporaryObject(dirhandle); status=IoCreateDevice(pDriverObject,sizeof(DEVICE_EXTENSION), devname,FILE_DEVICE_DISK,0,FALSE,&pDevObj); return status; } PUNICODE_STRING CharToUnicode(const char *str) { ANSI_STRING AStr; PUNICODE_STRING pUStr; if(str==NULL)return NULL; pUStr=ExAllocatePool(NonPagedPool,sizeof(UNICODE_STRING)); RtlInitAnsiString(&AStr,str); if(RtlAnsiStringToUnicodeString(pUStr,&AStr,TRUE)!=STATUS_SUCCESS) return NULL; return pUStr; } 编译成helloWDM.sys 然后在注册表HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\中增加一个helloWDM项和三个键ErrorControl=1 , Start=2 和 Type=1 驱动程序正确启动,并每5秒钟 打印一次HELLO WORLD,但在EXPL0RER中就是看不到创建的虚盘 |
|
沙发#
发布于:2007-03-23 09:42
你有没有mount??
|
|
板凳#
发布于:2007-03-27 21:41
代码不全阿。
|
|
|