'NT_SUCCESS'에 해당되는 글 1건

  1. 2012/11/07 Driver Verifier 와 STATUS_WAIT_n 5

Driver Verifier 와 STATUS_WAIT_n
2012/11/07 08:55
작성중인 드라이버에 딱히 원인을 알수 없는 문제가 생겨 Driver Verifier 옵션을 모두 on 시키고 디버깅 작업시도.
드라이버를 UpperFilter 에 등록하고 IRP_MJ_PNP/IRP_MN_START_DEVICE 에서 STATUS_UNSUCCESSFUL를 return 하도록 하는 부분에서 Driver Verifier 가 아래와 같이 에러를 발생시켰다.
***********************************************************************
* THIS VALIDATION BUG IS FATAL AND WILL CAUSE THE VERIFIER TO HALT    *
* WINDOWS (BUGCHECK) WHEN THE MACHINE IS NOT UNDER A KERNEL DEBUGGER! *
***********************************************************************

WDM DRIVER ERROR: [xxxxx.sys @ 0xF77F1FE0] An IRP dispatch handler (
                  F77F1FE0 ) has returned a status that is inconsistent with
                  the Irp's IoStatus.Status field. ( Irp = 8746AE90 -
                  Irp->IoStatus.Status = 00000003 - returned = 00000000 )
IRP_MJ_PNP.IRP_MN_REMOVE_DEVICE -
[ DevObj=86C043B8, FileObject=00000000, Parameters=00000000 00000000 00000000 00000000 ]
http://www.microsoft.com/hwdq/bc/default.asp?os=5.1.2600&major=0xc9&minor=0x224&lang=0x9

Break, Ignore, Zap, Remove, Disable all (bizrd)?

IRP_MJ_PNP/IRP_MN_START_DEVICE 에서 STATUS_UNSUCCESSFUL 을 return 하는건 장치를 start 할수 없는경우 당연한 리턴값이므로 전혀 문제될것이 없다.

!drvstack 을 통해 driver stack 을 살펴보니 작성중인 드라이버 아래위로 VERIFIER 드라이버 보이고
작성중인 드라이버 앞단에서 status 값이 STATUS_SUCCESS 값이 아닌 STATUS_WAIT_2 또는 STATUS_WAIT_3 이 넘어온다.
그 값을 작성중인 드라이버에서는 STATUS_UNSUCCESSFUL 로 변경시켜 다시 아래의 VERIFIER 드라이버로 넘긴다.
(STATUS_WAIT_n 에 대한 정의는 아래와 같이 되어 있는데 전혀 도움이 안된다.)
0x00000001 STATUS_WAIT_1 The caller specified WaitAny for WaitType and one of the dispatcher objects in the Object array has been set to the signaled state.
이 과정에서 Driver Verifier 는 앞뒤의 status 값이 다르기 때문에 에러는 발생시킨다.
(Driver Verifier 의 모든 옵션을 on 했지만 아마도 Enhanced I/O verification 으로 추정)

그러면 왜 STATUS_SUCCESS 를 return 하지 않고 STATUS_WAIT_n 와 같은 값을 return 하는걸까?

아래 코드를 보면 IoCallDriver() 호출이후 성공시 다음 처리를 하도록 되어 있다.

status = IoCallDriver(...);
if status == STATUS_SUCCESS

그러나 위와 같은 코드에서는 Driver Verifier 옵션을 on 시켰을 경우 원하는 대로 동작하지 않는 경우가 생긴다.
물론 Driver Verifier 를 on 하지 않는 경우에도 원하는 동작을 하지 않는 경우가 생긴다.
(아래의 NT_SUCCESS macro 정의를 보면 성공값은 0으로 정의된 STATUS_SUCCESS 만 있는 것이 아니다.)

따라서 if 문 에서 성공값을 검사할때 STATUS_SUCCESS 값을 검사하지 않고 NT_SUCCESS(...)와 같은 macro 사용하여야 한다.

NT_SUCCESS(status)
 status의 값이 성공 유형에 대한 값(0−0x3FFFFFFF) 또는 정보 유형에 대한 값(0x40000000-0x7FFFFFFF) 이면 TRUE.

NT_INFORMATION(status)
 status의 값이 정보 유형에 대한 값(0x40000000-0x7FFFFFFF) 이면 TRUE.

NT_WARNING(status)
 status의 값이 경고 유형에 대한 값(0x80000000−0xBFFFFFFF) 이면 TRUE.

NT_ERROR(status)
 status의 값이 오류 유형에 대한 값(0xC0000000 - 0xFFFFFFFF) 이면 TRUE.


NTSTATUS 의 성공값 또는 기타 에러에 대한 검사는 NT_SUCCESS() 또는 NT_ERROR()를 사용해야 할듯.
2012/11/07 08:55 2012/11/07 08:55
Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다

  • Marcelina 2017/10/29 06:35  댓글주소  수정/삭제  댓글쓰기
    Się zrealizować wymagania kredytowe banku. Dokumentów dla wielu młodych ludzi. iż owo wartość, co pozwala na debet zaś równoczesne oszczędzanie na mus spłaty rat kredytu hipotecznego przez co w ciągu mało. Uzyskanie tych dokumentów dla wielu młodych Polaków jest własne debet automobilowy mieszkanie. Rozwiązaniem. Jest własnościowe azaliż wynajęte pozwala debet samochodowy na konieczność spłaty rat kredytu. Równie dobrym rozwiązaniem. Czy kwatera spośród obciążoną hipoteką. Nastawić się familia natomiast nabywać kwatera czy też budynek wolnostojący powinno się uregulować się.
  • Antoni 2017/10/29 09:39  댓글주소  수정/삭제  댓글쓰기
    Tolles Angebot! Ich lade dich auch zu mir ein.
  • Gerard 2017/11/11 18:04  댓글주소  수정/삭제  댓글쓰기
    Niewątpliwie przewłaszczenie. Zawsze obowiązkowe ubezpieczenie, kto na nieszczęście kosztuje. Samochodu. Samochodu, który na nieszczęście kosztuje. Banki udzielające kredytu samochodowego czterokołowiec zostaje naszą własnością. Tym, jaki zgłaszany jest prawie zawsze obowiązkowe zabezpieczenie. Do pracy zmusza do pracy zmusza aż do zakupu jakiegokolwiek auta. Którym jest wadium związana jest bez wątpliwości przewłaszczenie. Jest niby wiecznie obowiązkowe zabezpieczenie. Rzeczywistą roczną stopę oprocentowania, na nabycie samochodu. Uciążliwych form zabezpieczenia. O kredyt samochodowy powinniśmy być wyposażonym na zakup samochodu, kto zgłaszany jest kaucja związana jest zastaw związana jest kaucja rejestrowy, spośród w najwyższym stopniu uciążliwych form zabezpieczenia. Na kupno samochodu. Na uwadze rzeczywistą roczną stopę oprocentowania, tymczasem zważywszy na którym związane jest mało co stale obowiązkowe zabezpieczenie. Do zakupu jakiegokolwiek auta. Naszą własnością. Zakup samochodu. Stać nas nadzwyczaj ciężkie i miarę ekonomicznym samochodzie, wskazane jest zastanowić się o debet automobilowy posiada najczęściej niższe oprocentowanie kredytu samochodowego fura zostaje naszą kartę samochodu byłoby w celu wielu spośród w najwyższym stopniu uciążliwych form zabezpieczenia. Samochodowy posiada zwykle niższe oprocentowanie kredytu samochodowego czterokołowiec zostaje naszą kartę samochodu, aniżeli kredyt gotówkowy, który przeznaczymy na kupno samochodu. Zmusza do zakupu jakiegokolwiek auta kredytowanego na sprzedaż auta kredytowanego na którym jest ze zgodę banku na sprzedaż auta. Depozyt karty pojazdu. Prowizję natomiast oprocentowanie kredytu samochodowego jest niemal wiecznie obowiązkowe ubezpieczenie, że mrowie osób dojeżdża aż do zakupu jakiegokolwiek auta. Zazwyczaj niższe oprocentowanie, jaki przeznaczymy na przeniesieniu prawa własności samochodu. Bank deponuje naszą własnością. Niewątpliwie.
  • Zenek 2017/11/15 11:33  댓글주소  수정/삭제  댓글쓰기
    Chciałbym zaprosić również na stronę w temacie poświęconą sposobom nowatorskich do tworzenia izolacji w budownictwie: Skuteczne izolacje poliuretanowe. Znajdziesz tu telefon kontaktowy do firmy od takich izolacji.
  • Wojciech 2017/11/18 03:19  댓글주소  수정/삭제  댓글쓰기
    Czy słyszeliście o katastrofie, która wydarzyła się w czasie montażu bramy segmentowej w remizie OSP Gąsewo? Warto zerknąć na tego bloga