NT_SUCCESS быть или не быть

Тема в разделе "WASM.NT.KERNEL", создана пользователем 0x56, 4 янв 2008.

  1. 0x56

    0x56 New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2008
    Сообщения:
    63
    Вот интересует такой вопрос господа, желательно с обоснованием или примерами.
    Как правильнее поступать при проверке значений возвращаемых кернел функциями.
    Использовать макрос NT_SUCCESS за исключением некоторых случаев, например с xxWait-функциями.
    Или же наоборот, проверять только == STATUS_SUCCESS, а NT_SUCCESS использовать в специфичных случаях.
     
  2. Deyton

    Deyton Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    94
    0x56

    Правильно использовать макрос NT_SUCCESS(...) Объясняю почему - функция может вернуть какое-нибудь положительное значение и это означает что она завершилась успешно, а значение может быть дополнительным информативным признаком чего-то там. Посмотри как раскрывается макрос - все станет ясно.

    Ответ на твой вопрос есть в MSDN:
    http://msdn2.microsoft.com/en-us/library/aa489609.aspx

     
  3. steelfactor

    steelfactor New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    501
    Хех, никогда бы не обратил внимания... :) Век живи - век учись...
     
  4. 0x56

    0x56 New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2008
    Сообщения:
    63
    Deyton
    Хорошо.
    Там далее приводятся 3 примера:

    IoRegisterDeviceInterface - STATUS_OBJECT_NAME_EXISTS
    ZwEnumerateKey - STATUS_NO_MORE_ENTRIES
    и даже пример где NT_SUCCESS или NT_ERROR могут не дать правильного результата

    Листаю наугад функции:
    т.е. или STATUS_SUCCESS или ошибку

    Поэтому я все же немного сомневаюсь в целесообразности использования его повсюду.
    А проверка таких статусов как STATUS_NO_MORE_ENTRIES, STATUS_OBJECT_NAME_EXISTS по моему и так подразумевается в контексте использования соотв. функций.

    Может у когото есть какие-то еще доводы.

    P.S.
    Код (Text):
    1. ZwOpenProcess returns an NTSTATUS value.
    расплывчатое что-то попалось :)
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    я юзаю NT_SUCCESS() и не вижу причин не юзать
     
  6. Chizh

    Chizh New Member

    Публикаций:
    0
    Регистрация:
    10 дек 2007
    Сообщения:
    23
    0x56, ты пытаешься все функции мерить одним мерилом. Это неправильно, т.к. у каждой функции свои особенности/специфика. Чтобы правильно интерпретировать возвращаемое значение, необходимо изучить её описание, там перечислены все возможные результаты.