[pso] [Tema 3][Windows] Bsod aleator la IoGetDeviceObjectPointer

Vladimir-Andrei Olteanu kooliva at gmail.com
Sat May 8 17:01:52 EEST 2010


Problema inca persista. Am incercat sa fac niste atribuiri variabilelor 
"data->Disk1FileObject" si  "data->Disk1DeviceObject" pentru a forta 
aparitia unui BSOD inainte de IoGetDeviceObjectPointer in cazul in care 
"data" nu e alocata, dar BSOD-ul tot apare la apelul functiei. Analiza 
unui crash dump arata astfel:

EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - The instruction at "0x%08lx" 
referenced memory at "0x%08lx". The memory could not be "%s".

FAULTING_IP:
nt!IoGetAttachedDevice+c
8081bb42 8b4810          mov     ecx,dword ptr [eax+10h]

TRAP_FRAME:  f78ea820 -- (.trap 0xfffffffff78ea820)
ErrCode = 00000000
eax=0108070a ebx=821d92f8 ecx=0108070a edx=00000000 esi=822ceb18 
edi=827a2020
eip=8081bb42 esp=f78ea894 ebp=f78ea894 iopl=0         nv up ei pl nz na 
pe nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             
efl=00010206
nt!IoGetAttachedDevice+0xc:
8081bb42 8b4810          mov     ecx,dword ptr [eax+10h] 
ds:0023:0108071a=????????
Resetting default scope

DEFAULT_BUCKET_ID:  DRIVER_FAULT

BUGCHECK_STR:  0x8E

PROCESS_NAME:  System

CURRENT_IRQL:  0

LAST_CONTROL_TRANSFER:  from 8082bbf0 to 80826dc7

STACK_TEXT:
f78ea3ec 8082bbf0 0000008e c0000005 8081bb42 nt!KeBugCheckEx+0x1b
f78ea7b0 808843ca f78ea7cc 00000000 f78ea820 nt!KiDispatchException+0x3a2
f78ea818 8088437e f78ea894 8081bb42 badb0d00 nt!CommonDispatchException+0x4a
f78ea838 80957d60 e1b2f8cc 827cf1d8 00000002 nt!Kei386EoiHelper+0x182
f78ea894 808f08e7 822b37a8 f78eaa40 826e2690 nt!RtlpInheritAcl2+0xe2
f78ea980 8092f71c 826e26a8 00000000 822ceb18 nt!IopParseDevice+0x401
f78eaa00 8092b85c 00000000 f78eaa40 00000240 nt!ObpLookupObjectName+0x5b0
f78eaa54 808e2de7 00000000 00000000 00000000 nt!ObOpenObjectByName+0xea
f78eaad0 808e4081 f78eac4c 001f01ff f78eac24 nt!IopCreateFile+0x447
f78eab2c 808e7c11 f78eac4c 001f01ff f78eac24 nt!IoCreateFile+0xa3
f78eab6c 80883908 f78eac4c 001f01ff f78eac24 nt!NtOpenFile+0x27
f78eab6c 8082d049 f78eac4c 001f01ff f78eac24 nt!KiFastCallEntry+0xf8
f78eabfc 808e2f94 f78eac4c 001f01ff f78eac24 nt!ZwOpenFile+0x11
f78eac44 f7828373 f78eac5c 001f01ff 822fa844 
nt!IoGetDeviceObjectPointer+0x40
f78eac88 808eed5d 824413c8 82462000 00000000 ssr!DriverEntry+0x113 
[c:\cygwin\home\administrator\share\so2\ssr_main.c @ 154]
f78ead58 808eee73 8000089c 00000001 00000000 nt!IopLoadDriver+0x689
f78ead80 8087adc1 8000089c 00000000 827a2020 nt!IopLoadUnloadDriver+0x45
f78eadac 809418f4 f65dfcf4 00000000 00000000 nt!ExpWorkerThread+0xeb
f78eaddc 80887f4a 8087acd6 00000001 00000000 nt!PspSystemThreadStartup+0x2e
00000000 00000000 00000000 00000000 00000000 nt!KiThreadStartup+0x16


STACK_COMMAND:  kb

FOLLOWUP_IP:
ssr!DriverEntry+113 [c:\cygwin\home\administrator\share\so2\ssr_main.c @ 
154]
f7828373 8945e8          mov     dword ptr [ebp-18h],eax

FAULTING_SOURCE_CODE:
    150:     device->Flags |= DO_DIRECT_IO;
    151:     data  = (struct SSR_DATA *)device->DeviceExtension;
    152:
    153:     ret = IoGetDeviceObjectPointer(&disk1UnicodeName, 
FILE_ALL_ACCESS,
 >  154: &data->Disk1FileObject, &data->Disk1DeviceObject);
    155:     if (!NT_SUCCESS(ret))
    156:     {
    157:         DbgPrint("Eroare la IoGetDeviceObjectPointer 1");
    158:         goto error;
    159:     }


SYMBOL_STACK_INDEX:  e

SYMBOL_NAME:  ssr!DriverEntry+113

FOLLOWUP_NAME:  MachineOwner

MODULE_NAME: ssr

IMAGE_NAME:  ssr.sys

DEBUG_FLR_IMAGE_TIMESTAMP:  4be569b9

FAILURE_BUCKET_ID:  0x8E_ssr!DriverEntry+113

BUCKET_ID:  0x8E_ssr!DriverEntry+113

Followup: MachineOwner
---------


On 5/8/2010 12:46 AM, Vladimir-Andrei Olteanu wrote:
> Salut!
>
> Modulul meu imi da Bsod uneori cand apelez IoGetDeviceObjectPointer 
> (ceea ce ma duce cu gandul la parametri neinitializati).
> Programul arata astfel:
>
> struct SSR_DATA
> {
>     [...]
>     PFILE_OBJECT Disk1FileObject;
>     PDEVICE_OBJECT Disk1DeviceObject;
>     PFILE_OBJECT Disk2FileObject;
>     PDEVICE_OBJECT Disk2DeviceObject;
> };
>
> [...]
>
> ret = IoCreateDevice(driver, sizeof(struct SSR_DATA) ...)
> [...]
> data  = (struct SSR_DATA *)device->DeviceExtension;
> ret = IoGetDeviceObjectPointer(&disk1UnicodeName, FILE_ALL_ACCESS,
> &data->Disk1FileObject, &data->Disk1DeviceObject);
> [...]
>
> Primul parametru l-am initializat cu 
> RtlInitUnicodeString(&disk1UnicodeName, PHYSICAL_DISK1_DEVICE_NAME) si 
> m-am asigurat ca disk1UnicodeName.Buffer nu e NULL.
> Am verificat codurile de eroare, si IoCreateDevice se termina cu  
> succes, deci variabila data este alocata.
>
> Bsod-ul poate aparea de la oricare dintre cele doua apeluri ale 
> functiei IoGetDeviceObjectPointer, sau, uneori, nu apare deloc.
>
> Imi scapa ceva?
>
> Vlad



More information about the pso mailing list