描述:
刚开始学驱动,什么都不会,一个很简单的驱动,什么也不做,就是mov eax, STATUS_SUCCESS, 调用StartService总是不成功,当调用GetLastError是返回的错误代码不在MSDN上给出的有关部门StartService可能出现的错误,实在是搞不懂,还请大家帮忙看看,谢谢了。
源程序如下:
源程序里include的头文件就省略了
驱动源程序
;myDriver1.asm
.386
.model .....
....
....
include ....
...
.code
DriverEntry proc pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING
mov eax, STATUS_SUCCESS
ret
DriverEntry
end DriverEntry
;***********编译过程*********
ml /c /coff myDriver1.asm
link /driver /out:myDriver1.sys /subsystem:native myDriver1.obj
驱动安装的源程序
;scp1.asm
.386
.model .....
......
....
include ....
...
.const
szServceName db 'SvName', 0
szDisplayName db 'DpName', 0
szImagePath db 'c:\myDriver1.sys', 0
ErrorCode dd ERROR_ACCESS_DENIED
dd ERROR_INVALID_HANDLE
dd ERROR_PATH_NOT_FOUND
dd ERROR_SERVICE_ALREADY_RUNNING
dd ERROR_SERVICE_DATABASE_LOCKED
dd ERROR_SERVICE_DEPENDENCY_DELETED
dd ERROR_SERVICE_DEPENDENCY_FAIL
dd ERROR_SERVICE_DISABLED
dd ERROR_SERVICE_LOGON_FAILED
dd ERROR_SERVICE_MARKED_FOR_DELETE
dd ERROR_SERVICE_NO_THREAD
dd ERROR_REQUEST_TIMEOUT
ErrorMsg db 'ERROR_ACCESS_DENIED', 0
db 'ERROR_INVALID_HANDLE', 0
db 'ERROR_PATH_NOT_FOUND', 0
db 'ERROR_SERVICE_ALREADY_RUNNING', 0
db 'ERROR_SERVICE_DATABASE_LOCKED', 0
db 'ERROR_SERVICE_DEPENDENCY_DELETED', 0
db 'ERROR_SERVICE_DEPENDENCY_FAIL', 0
db 'ERROR_SERVICE_DISABLED', 0
db 'ERROR_SERVICE_LOGON_FAILED', 0
db 'ERROR_SERVICE_MARKED_FOR_DELETE', 0
db 'ERROR_SERVICE_NO_THREAD', 0
db 'ERROR_REQUEST_TIMEOUT', 0, 0
db 'Fail to Define Error Code', 0
.code
;************ Procedure Used to Define Error
ParseError proc
push ebp
mov ebp, esp
;[ebp + 8] ErrorCode
mov ebx, offset ErrorCode
mov esi, offset ErrorMsg
mov ecx, [ebp + 8]
_@_@@3:
cmp [ebx], ecx
jz _@_@@1
_@_@@2:
lodsb
or al, al
jnz _@_@@2
lodsb
or al, al
jz _@_@@1
dec esi
add ebx, 4
jmp _@_@@3
_@_@@1:
invoke MessgeBox, 0, 0, esi, 0
mov esp, ebp
pop ebp
ret 4
ParseError endp
start:
invoke OpenSCManager, 0, 0, SC_MANAGER_CREATE_SERVICE
;
;为简单其间,都设调用成功,下同
;
push eax
invoke CreateService, eax, offset szServiceName, offset zDisplayName,\
SERVICE_START+DELETE, SERVICE_KERNEL_DRIVER, SREVICE_DEMAND_START,\
SERVICE_ERROR_IGNORE, offset szImagePath, 0, 0, 0, 0, 0
push eax
invoke StartService, eax, 0, 0
or eax, eax
&nb