这两天了解了下建立设备和符号链接这块的知识 改了下代码 熟悉一下
.386
.model flat, stdcall
option casemap:none
include w2k/ntstatus.inc
include w2k/ntddk.inc
include w2k/ntoskrnl.inc
include w2k/w2kundoc.inc
includelib ntoskrnl.lib
.data
szDeviceName dw '/','d','e','v','i','c','e','/','1',0 ;这块必须是字型数据 但一般定义成字型会出错 所以只能一个字一个字定义
szSymbolicLinkName dw '/','?','?','/','1',0
.code INIT
DriverEntry proc pDriverObject:PDRIVER_OBJECT,pusRegistryPath:PUNICODE_STRING
local status:NTSTATUS
local pDeviceObject:PVOID
local DeviceName:UNICODE_STRING
local SymbolicLinkName:UNICODE_STRING
int 3
invoke RtlInitUnicodeString,addr DeviceName,addr szDeviceName
invoke RtlInitUnicodeString,addr SymbolicLinkName,addr szSymbolicLinkName
mov status,STATUS_DEVICE_CONFIGURATION_ERROR
invoke IoCreateDevice,pDriverObject,0,addr szDeviceName,FILE_DEVICE_UNKNOWN,0,FALSE,addr pDeviceObject
.if eax == STATUS_SUCCESS
invoke IoCreateSymbolicLink, addr SymbolicLinkName, addr szDeviceName
.if eax == STATUS_SUCCESS
mov eax, pDriverObject
mov eax,KeServiceDescriptorTable
.endif
.endif
ret
DriverEntry endp
end DriverEntry
具体内容可以参考罗云彬翻译的一个KMDTUT之类的手册
中午看了SSDT这块 当时就没明白KeServiceDescriptorTable这个东西怎么来的,下午琢磨着是不是已经定义过了 所以可以直接拿来用 晚上就试着写了句代码(上面红字处) 果然编译通过 这下就明白了