Ausrechnen von Konstanten mit CTL_CODE in PB ??
Verfasst: 28.05.2005 20:42
Ich hab ein Problem:
Ich brauch die Werte von den API Konstanten IOCTL_STORAGE_MEDIA_REMOVAL
und IOCTL_STORAGE_EJECT_MEDIA sowie FSCTL_LOCK_VOLUME und
FSCTL_DISMOUNT_VOLUME weil ich möchte die Funktion
DeviceIoControl_() benutzen um ein Streamerlaufwerk zu entsperren und dann die Kassette
auszuwerfen.
Nun habe ich wie irr gesucht und Danilos Hinweis gefunden das man alle Api Konstanten
in der Include Datei von dem SDK findet. Aber das stimmt nur teilweise. Blöderweise
muß man sich nen haufen Konstanten erst umständlich rausrechnen und zwar mit einer CTL_CODE
Funktion und natürlich genau die die ich brauch
Jetzt steht natürlich nirgends was die CTL_CODE Funktion tut.
Ich hab dann gegoogeld und wenigstens ein VB Code gefunden:
in PB:
Ich hoff das stimmt so.
mit den rausgesuchten Konstanten isses:
Anstatt dass ich jetzt endlich den Wert für IOCTL_STORAGE_EJECT_MEDIA bekomm meckert
der PB Compiler das er Floats nicht mit | verwenden kann....
jetzzt habs ich halt umgebaut in
Jetzt krieg ich was raus aber es ist was falsches, nämlich 11370497
aber rauskommen sollte 2967560, das hab ich nämlich im i-net wo
gefunden.
Die drei anderen Kostanten Konstanten IOCTL_STORAGE_MEDIA_REMOVAL,
IOCTL_STORAGE_EJECT_MEDIA , FSCTL_LOCK_VOLUME
hab ich aber nicht und die sind sicher falsch wenn ich sie so rausrechne mit CTL_CODE.
Hat wer eine Idee was falsch ist ? Ich komm nicht weiter. Der ganze Tag ist versaut mit
Herumgesuche.
Voll super wär natürlich eine Liste wo wirklich alle Konstanten drinstehen....
Vielen Dank
LUPO
Ich brauch die Werte von den API Konstanten IOCTL_STORAGE_MEDIA_REMOVAL
und IOCTL_STORAGE_EJECT_MEDIA sowie FSCTL_LOCK_VOLUME und
FSCTL_DISMOUNT_VOLUME weil ich möchte die Funktion
DeviceIoControl_() benutzen um ein Streamerlaufwerk zu entsperren und dann die Kassette
auszuwerfen.
Nun habe ich wie irr gesucht und Danilos Hinweis gefunden das man alle Api Konstanten
in der Include Datei von dem SDK findet. Aber das stimmt nur teilweise. Blöderweise
muß man sich nen haufen Konstanten erst umständlich rausrechnen und zwar mit einer CTL_CODE
Funktion und natürlich genau die die ich brauch
Code: Alles auswählen
#define IOCTL_STORAGE_MEDIA_REMOVAL CTL_CODE(IOCTL_STORAGE_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_STORAGE_EJECT_MEDIA CTL_CODE(IOCTL_STORAGE_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)
Ich hab dann gegoogeld und wenigstens ein VB Code gefunden:
Code: Alles auswählen
Private Function CTL_CODE(lngDeviceType, lngFunction, lngMethod, lngAccess) As Long CTL_CODE = ((lngDeviceType * (2 ^ 16)) Or (lngAccess * (2 ^ 14)) Or (lngFunction * (2 ^ 2)) Or lngMethod) End Function
Code: Alles auswählen
CTL_CODE.l = lngDeviceType * Pow(2,16) | lngAccess * Pow(2,14) | lngFunction * Pow(2,2) | lngMethod
mit den rausgesuchten Konstanten isses:
Code: Alles auswählen
#IOCTL_STORAGE_BASE = $2D
#METHOD_BUFFERED = 0
#FILE_READ_ACCESS = 1
IOCTL_STORAGE_EJECT_MEDIA.l = #IOCTL_STORAGE_BASE * Pow(2,16) | $201 * Pow(2,14) | #METHOD_BUFFERED * Pow(2,2) | #FILE_READ_ACCESS
der PB Compiler das er Floats nicht mit | verwenden kann....
jetzzt habs ich halt umgebaut in
Code: Alles auswählen
#IOCTL_STORAGE_BASE = $2D
#METHOD_BUFFERED = 0
#FILE_READ_ACCESS = 1
term1.l = #IOCTL_STORAGE_BASE * Pow(2,16)
term2.l = $202 * Pow(2,14)
term3.l = #METHOD_BUFFERED * Pow(2,2)
term4.l = #FILE_READ_ACCESS
IOCTL_STORAGE_EJECT_MEDIA.l = term1 | term2 | term3 | term4
Debug IOCTL_STORAGE_EJECT_MEDIA
aber rauskommen sollte 2967560, das hab ich nämlich im i-net wo
gefunden.
Die drei anderen Kostanten Konstanten IOCTL_STORAGE_MEDIA_REMOVAL,
IOCTL_STORAGE_EJECT_MEDIA , FSCTL_LOCK_VOLUME
hab ich aber nicht und die sind sicher falsch wenn ich sie so rausrechne mit CTL_CODE.
Hat wer eine Idee was falsch ist ? Ich komm nicht weiter. Der ganze Tag ist versaut mit
Herumgesuche.
Voll super wär natürlich eine Liste wo wirklich alle Konstanten drinstehen....
Vielen Dank
LUPO