Windows DDK i definicje typów

0

W nagłówkach DDK dla Windows występują dziwne definicje
które są uzywane przy deklaracji typów parametrów
przekazywanych do Funkcji . ( przynajmniej dla mnie ) .

Fragment pliku winddk.h :


/* Pseudo modifiers for parameters */
#define IN
#define OUT

...
...

Kod sterownika (przykładowy) *.sys w którym się tego czegoś używa :

#include <ntddk.h>

NTSTATUS DriverEntry( IN PDRIVER_OBJEKT pDriveObj , IN PUNICODE_STRING pUstring)
{
	DbgPrint("Super sterownik do urządzenia X .") ;
	return STATUS_SUCCESS ;
}

Do czego to służy ?

Wywalenie tych IN i OUT podczas kompilacji nie powoduje problemów .
Nie wiem jeszcze jak z kodem wynikowym bo nie napisałem aplikacji ładującej
sterownik .

0

Proste :)

IN - parametr na wejście
OUT - parametr na wyjście

Są to tylko informacje dla programisty ;)

Pozdrawiam

0

Acha , czyli wpływ na plik wynikowy żaden .
Zastanowiło mnie to bo kod sterowników zawiera różne kobinacje tych IN OUT

np . spotkałem kod fun różniący się w ten sposób :
1.

NTSTATUS DriverEntry( IN PDRIVER_OBJEKT pDriveObj , IN PUNICODE_STRING pUstring)
{...
             //   Zawartość
NTSTATUS DriverEntry( IN OUT PDRIVER_OBJEKT pDriveObj , IN PUNICODE_STRING pUstring)
{...
             //  Zawartość ta sama

Czyli informacje , tyle że niewiele warte przy takim podejściu ... ;-)

Dzięki za odpowiedz .
dzejo

0
/* Pseudo modifiers for parameters */
#define IN
#define OUT

Dosłownie zapis ten oznacza: zdefiniuj IN (lub OUT) jako pusty ciąg znaków (czyli to, co po nazwie definicji do końca linii). Jak gdzieś w kodzie użyjesz IN/OUT to prekompilator wrzuci zamiast tego pusty ciąg znaków - czyli nic.

0

Tyle to wiem , jak działa #def.....
Chciałem się tylko upewnić że nie są używane w jakiejś
np. kompilacji warunkowej .
W takim przypadku zdefiniowanie nazwy
w postaci nawet pustego 'nica' może mieć wpływ na kod wynikowy .
np:

#define IN__

    #ifdef IN__

           #define modyfikator  signed
    #else
           #define modyfikator  unsigned
    #endif
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char **argv)
{

 modyfikator char a = 200 ;
 cout << (int)a << endl ;

            cin.get();
        return 0;
}

Wynikiem dzialania programu jest -56 lub 200 zależnie od definicji IN__ ( brak lub jest )
Mogłem grepnąć pod tym kątem *.h ale chcialem się dowiedzieć co na to szanowne Forum...
czasami można natknąć się na różne cuda i samodzielna analiza nie zawsze bywa trafna.
pozdro .

1 użytkowników online, w tym zalogowanych: 0, gości: 1