Vielleicht solltest du die Funktion richtig benutzen. Also die Funktion benötigt beispielsweise ein paar Pointer als Parameter, bei dir seh ich da keine.
Code: Alles auswählen
BOOL DeviceIoControl(
HANDLE hDevice, // handle to device of interest
DWORD dwIoControlCode, // control code of operation to perform
LPVOID lpInBuffer, // pointer to buffer to supply input data
DWORD nInBufferSize, // size of input buffer
LPVOID lpOutBuffer, // pointer to buffer to receive output data
DWORD nOutBufferSize, // size of output buffer
LPDWORD lpBytesReturned, // pointer to variable to receive output byte count
LPOVERLAPPED lpOverlapped // pointer to overlapped structure for asynchronous operation
);
So sieht's aus, also solltest du erstmal alle Parameter die einen Pointer benötigen auch so angeben. Der vorletzte Parameter zeigt dabei auf eine Variable des Typs Double Word (in PB wohl als Long handzuhaben). Du setzt da direkt eine Variable ein, keine Angabe zum Speicherbereich sondern direkt die Variable. Er will dann in den Speicherbereich, auf den die Variable pointet etwas schreiben, geht aber nicht, da die Variable frisch erstellt ist und keinen Speicherbereich beinhaltet. Daher vielleicht der Fehler, dass zu wenige Daten übergeben wurden.
Ist natürlich nur eine Vermutung und ungetestet, aber wär' ein Versuch wert.
Ist schon manchmal ganz gut wenn man Variablen nicht on-the-fly deklarieren kann sondern es sorgfältig vor Benutzung machen muss, da spart man sich manchmal Fehler ein.
Also entweder die Variable vorher deklarieren und per @ dann auf sie pointen oder einen richtigen Pointer erstellen der auf eine Variable zeigt oder aif einen allocierten Bereich von 4 Byte Größe.