建立设备、符号链接及初识SSDT

来源:互联网 发布:shake it舞蹈 编辑:程序博客网 时间:2024/05/21 09:55

这两天了解了下建立设备和符号链接这块的知识 改了下代码 熟悉一下

 

.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这个东西怎么来的,下午琢磨着是不是已经定义过了 所以可以直接拿来用 晚上就试着写了句代码(上面红字处) 果然编译通过 这下就明白了