Ошибка DeviceIoControl - IOCTL_SCSI_PASS_THROUGH при исполнени

Тема в разделе "WASM.WIN32", создана пользователем recover2, 9 июн 2011.

  1. recover2

    recover2 New Member

    Публикаций:
    0
    Регистрация:
    30 дек 2004
    Сообщения:
    3
    Адрес:
    Russia
    Этот фрагмент кода:
    invoke DeviceIoControl,hDevicePhysI,IOCTL_SCSI_PASS_THROUGH,Offset sptwb, 2Ch,Offset sptwb, 250h,cbBytesReturned, NULL
    00401627 push 0
    00401629 push dword ptr [cbBytesReturned (43CA46h)]
    0040162F push 250h
    00401634 push offset sptwb (43B000h)
    00401639 push 2Ch
    0040163B push offset sptwb (43B000h)
    00401640 push 4D004h
    00401645 push dword ptr [hDevicePhysI (43C9CDh)]
    0040164B call _DeviceIoControl@32 (424ED4h)
    Вызвает Необработанное исключение в "0x7c80168e" в "DiskInspector.exe":
    0xC0000005: Нарушение прав доступа при записи "0x00000018".

    Аналогичный код на VS:
    bRet = DeviceIoControl(hIoCtrl, IOCTL_SCSI_PASS_THROUGH,
    &sptwb, sizeof(SCSI_PASS_THROUGH),
    &sptwb, length,
    &dwReturned, NULL);
    0041A911 mov esi,esp
    0041A913 push 0
    0041A915 lea eax,[ebp-30h]
    0041A918 push eax
    0041A919 mov ecx,dword ptr [ebp-3Ch]
    0041A91C push ecx
    0041A91D lea edx,[ebp-4A8h]
    0041A923 push edx
    0041A924 push 2Ch
    0041A926 lea eax,[ebp-4A8h]
    0041A92C push eax
    0041A92D push 4D004h
    0041A932 mov ecx,dword ptr [ebp-24h]
    0041A935 push ecx
    0041A936 call dword ptr [KERNEL32_NULL_THUNK_DATA (4243B0h)]
    0041A93C cmp esi,esp
    0041A93E call @ILT+1110(__RTC_CheckEsp) (41145Bh)
    0041A943 mov dword ptr [ebp-18h],eax
    Работает без проблем.

    Может всезнающий All подскажит в чем проблема?
     
  2. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Код (Text):
    1. 00401629  push        dword ptr [cbBytesReturned (43CA46h)]
    судя по всему должно быть:
    Код (Text):
    1. push offset cbBytesReturned