Помогите открыть файл NtOpenFile()

Тема в разделе "WASM.WIN32", создана пользователем abb, 6 фев 2008.

  1. abb

    abb New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    11
    Коллеги!

    Сделал простой примерчик:

    Код (Text):
    1. program testopn;
    2.  
    3. uses Windows, SysUtils, NTDLL;
    4.  
    5. var
    6.   r   : NTSTATUS;
    7.   h   : THandle;
    8.   sa  : TNtAnsiString;
    9.   su  : TNtUnicodeString;
    10.   obj : TNtObjectAttributes;
    11.   inf : TIoStatusBlock;
    12.  
    13.  
    14. begin
    15.   RtlInitAnsiString(@sa, PChar('\\?\' + ParamStr(0)));
    16.   RtlAnsiStringToUnicodeString(@su, @sa, true);
    17.   InitializeObjectAttributes(@obj,
    18.                              @su,
    19.                              OBJ_CASE_INSENSITIVE,
    20.                              0,
    21.                              nil);
    22.   r := NtOpenFile(h,
    23.                   GENERIC_READ,
    24.                   obj,
    25.                   inf,
    26.                   FILE_SHARE_READ,
    27.                   OPEN_EXISTING);
    28. //
    29. // здесь r = 0xC0000033
    30. //
    31.   if r = STATUS_SUCCESS then
    32.     NtClose(h);
    33.   RtlFreeUnicodeString(@su);
    34.   RtlFreeAnsiString(@sa);
    35. end.
    Помогите, пожалуйста, разобраться с тем, как правильно записать UNC-путь. Ошибка говорит "Неверное имя папки". Хотя может моя ошибка где-то еще?

    Заранее спасибо!
     
  2. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Что в ParamStr(0)?
     
  3. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Twister
    Имя исполняемого файла однако.
     
  4. abb

    abb New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    11
    Казалось бы ничего предосудительного. Нет?
     
  5. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    abb
    Код (Text):
    1. ...
    2. //RtlInitAnsiString(@sa, PChar('\\?\' + ParamStr(0)));
    3. RtlInitAnsiString(@sa, PChar('\??\' + ParamStr(0)));
    4. ...
    5. r := NtOpenFile(h,
    6.                   GENERIC_READ,
    7.                   obj,
    8.                   inf,
    9.                   FILE_SHARE_READ,
    10.                   FILE_NON_DIRECTORY_FILE);
    11. //                  OPEN_EXISTING);
    12. ...
     
  6. abb

    abb New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    11
    q_q
    Большое человеческое спасибо!
    Статью MSDN про это я не смог осилить...