|
|
От: | den2k | |
| Дата: | 18.04.05 09:35 | ||
| Оценка: | |||
\Registry\Machine\System\CurrentControlSet\Services\<YourDriverName>
VAB> ...
VAB> Parameters
VAB> ClientDriverName = REG_SZ drvname
VAB> ClientDeviceName = REG_SZ devname
.data
CTW0 "Startup",szStartup,4
CCOUNTED_UNICODE_STRING "\\Registry\\User",szUserKey,4
szUserStartFolder db "\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders",0
szUserStartFolderSize=$-szUserStartFolder
rr RTL_QUERY_REGISTRY_TABLE <>
rr2 RTL_QUERY_REGISTRY_TABLE <>
.code
EnumProc proc uses esi
local us:UNICODE_STRING
local bufftmp[500]:byte
local hKey:HANDLE
LOCAL counter:DWORD
local KeyBuff:DWORD
Scall GetSubKeyCount,offset szUserKey
.IF eax != 0
mov counter,eax
mov us._Length,szUserStartFolderSize
lea ebx,us
Scall AnsiStringToUnicodeString,ebx,offset szUserStartFolder,0
SetAboutBlankLoop:
lea eax,us
Scall GetSubKey,offset szUserKey,counter,eax
;После вызова функции GetSubKey в eax имеем UNICODE_STRING где
; UNICODE_STRING.Buffer содержит строку вида
;\Registry\User\S-1-5-18\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
.IF eax != 0
mov KeyBuff,eax
invoke RtlZeroMemory,addr bufftmp,500
mov eax,KeyBuff
invoke DbgPrint, $CTA0("\n%ws\n"),(UNICODE_STRING ptr [eax]).Buffer
invoke DbgPrint, $CTA0("\n%ws\n"),offset szStartup
mov rr.Flags,RTL_QUERY_REGISTRY_DIRECT;
mov rr._Name,offset szStartup
lea ecx,bufftmp
mov rr.EntryContext,ecx
mov eax,KeyBuff
invoke RtlQueryRegistryValues,RTL_REGISTRY_ABSOLUTE or RTL_QUERY_REGISTRY_REQUIRED,\
(UNICODE_STRING ptr [eax]).Buffer,offset rr,0,0
mov eax,KeyBuff
invoke ExFreePool,(UNICODE_STRING ptr [eax]).Buffer
.ENDIF
dec counter
cmp counter,0
jge SetAboutBlankLoop
invoke ExFreePool,us.Buffer
.ENDIF
ret
EnumProc endp