@Nils_25: das ist eine andere Frage, gehört also in einen neuen Thread. Aber du kannst dir ja mal das Makro anschauen, dessen Parameter du uns oben angegeben hast, dann wirst du feststellen, wie man die IOCTLs selber berechnet. Der Name des Makros ist: CTL_CODE
Ich würde dir übrigens nicht empfehlen den generischen Porttreiber ("GPD") aus dem
DDK zu nehmen - auch nicht irgendwelche Derivate, die du u.U. noch nichtmal verstehst. Habe ich hier schon oft genug begründet, also suche einfach mal mithilfe der Forumssuche.
Das Makro:
Code:
#define CTL_CODE( DeviceType, Function, Method,
Access ) ( \
((DeviceType) << 16) | ((
Access) << 14) | ((Function) << 2) | (Method) \
)
Im GPD aus dem
DDK haben wir:
Code:
#define GPD_TYPE 40000
// ntddk.h
#define METHOD_BUFFERED 0
#define METHOD_IN_DIRECT 1
#define METHOD_OUT_DIRECT 2
#define METHOD_NEITHER 3
// ... ntddk.h
#define FILE_ANY_ACCESS 0
#define FILE_SPECIAL_ACCESS (FILE_ANY_ACCESS)
#define FILE_READ_ACCESS ( 0x0001 ) // file & pipe
#define FILE_WRITE_ACCESS ( 0x0002 ) // file & pipe
Beispiel:
Code:
_ CTL_CODE(GPD_TYPE, 0x443, METHOD_BUFFERED, FILE_WRITE_ACCESS)
== CTL_CODE(40000, 0x443, 0, 2)
== (40000 << 16) | (2 << 14) | (0x443 << 2) | 0 // C-Syntax
== (40000 shl 16) or (2 shl 14) or ($443 shl 2) or 0 // Delphi-Syntax
== ($9C40 shl 16) or ($2 shl 14) or ($443 shl 2) or 0 // Delphi-Syntax
== ($9C400000) or ($8000) or ($110C) or 0 // Delphi-Syntax
== ($9C400000) or ($8000) or ($110C) or 0 // Delphi-Syntax
== $9C40910C
Ich hoffe mal, daß ich richtig gerechnet habe. Hab's im Kopf gerechnet.