Как можно заменить макрос InitializeObjectAttributes , для динамической инициализации в драйвере подаваемой строки , но не при компиляции?
OBJECT_ATTRIBUTES это такая структура. Просто напиши функцию для заполнения, выделения памяти и т.д. Код (Text): Length dd ? RootDirectory dd ? ObjectName dd ? Attributes dd ? SecurityDescriptor dd ? SecurityQualityOfService dd ?
Код (Text): OBJECT_ATTRIBUTES STRUCT ; sizeof = 18h dwLength DWORD ? ; original name Length RootDirectory HANDLE ? ObjectName AU_STRING <?> Attributes DWORD ? SecurityDescriptor PVOID ? ; Points to type SECURITY_DESCRIPTOR SecurityQualityOfService PVOID ? ; Points to type SECURITY_QUALITY_OF_SERVICE OBJECT_ATTRIBUTES ENDS и вот типо вручную инициализация Код (Text): assume ecx:nothing lea ecx, oa xor eax, eax assume ecx:ptr OBJECT_ATTRIBUTES mov [ecx].dwLength, sizeof OBJECT_ATTRIBUTES mov [ecx].RootDirectory, eax ; NULL push 0 pop [ecx].ObjectName.buff mov [ecx].Attributes, eax ; 0 mov [ecx].SecurityDescriptor, eax ; NULL mov [ecx].SecurityQualityOfService, eax ; NULL assume ecx:nothing а вот то что мне надо записать в таблицу InitializeObjectAttributes addr oa,offset usDeviceName, OBJ_CASE_INSENSITIVE + OBJ_KERNEL_HANDLE, NULL, NULL где offset usDeviceName это строка от invoke RtlInitUnicodeString, addr usDeviceName,edx где в едх строка в юникоде для инициализации. Есть другие примеры заполнения ? В выше описанное не оч понятно. Как заполнить ее я не в курсе =(
Я не помню masm. Наверное так: Код (Text): IOAttr PROC hRootDir:DWORD,uStr:DWORD,Attr:DWORD invoke ExAllocatePool,PagedPool,18h mov ecx,eax assume ecx: PTR OBJECT_ATTRIBUTES xor ebx,ebx mov [ecx].dwLength, sizeof OBJECT_ATTRIBUTES mov eax,hRootDir mov [ecx].RootDirectory,eax mov eax,[uStr] push eax pop [ecx].ObjectName.buff mov eax,[Attr] mov [ecx].Attributes, eax mov [ecx].SecurityDescriptor, ebx mov [ecx].SecurityQualityOfService, ebx assume ecx:nothing mov eax,ecx ret IOAttr ENDP ;example push 0 push offset usDeviceName push OBJ_CASE_INSENSITIVE + OBJ_KERNEL_HANDLE call IOAttr