win32api::file translation of c-code to perl: help pls
am 21.04.2008 15:20:19 von Susanne Westi have the following c-code that sould send out a
command through deviceIO using win32api::file, and
i'm struggling with the proper handling of the code.
the result of my DeviceIoControl() command is always
NULL...
#! perl
# -------------------------------
# c-code:
# define BUFF_SIZE 0x2c
# HANDLE hHandle = CreateFileA("\\\\.\\APPDRV",
# GENERIC_READ|GENERIC_WRITE, 0,
# NULL, OPEN_EXISTING, 0x80, NULL);
#
# char buffer[BUFF_SIZE];
# memset(buffer, 0, BUFF_SIZE);
# buffer[0] = 0x04;
# buffer[1] = 0x00;
# buffer[2] = 0x06;
# buffer[3] = 0x00;
# buffer[4] = 7;
# buffer[5] = 7;
#
# DWORD bytesReturned;
# BOOL result = DeviceIoControl(hHandle, 0x23209C,
# buffer, BUFF_SIZE, buffer, BUFF_SIZE, &bytesReturned, NULL);
#-------------------------------
#
#for testing, this should translate into the following:
$hDevice = createFile("\\\\.\\APPDRV", "rw", '' );
if (! $hDevice){ die("Could not open device! \n"); }
print "Device open\n"; #this seems to be working
$buffer = chr(04) . chr(0) . chr(06) . chr(0) .
7 . 7 . chr(0) . chr(0) .
chr(0) . chr(0) . chr(0) . chr(0) .
chr(0) . chr(0) . chr(0) . chr(0) .
chr(0) . chr(0) . chr(0) . chr(0) .
chr(0) . chr(0) . chr(0) . chr(0) .
chr(0) . chr(0) . chr(0) . chr(0) .
chr(0) . chr(0) . chr(0) . chr(0) .
chr(0) . chr(0) . chr(0) . chr(0) .
chr(0) . chr(0) . chr(0) . chr(0);
$res = DeviceIoControl( $hDevice, 0x23209C, $buffer, 44, $opOutBuf, 44,
$olRetBytes, $pOverlapped );
if (! $res){ print "IO control failed\n"; } # this fails
am i missing something here?
thanks for any hints...