Hallo zusammen,
ich stehe irgendwie auf dem Schlau. Die folgende Zeile funktioniert unter XE2 32Bit hervorragend und unter 64Bit gibt es die Meldung wie im Titel.
Delphi-Quellcode:
var
FFileHandle : Cardinal;
TmpSerial : array[1..20] of AnsiChar;
i, j : integer;
buffer : array [0..sizeof (SRB_IO_CONTROL) + sizeof (SENDCMDOUTPARAMS)] of AnsiChar;
p : SRB_IO_CONTROL absolute buffer;
pin : PSENDCMDINPARAMS;
dummy : dword;
pOut : PSENDCMDOUTPARAMS;
pId : PIDSECTOR;
begin
result := '';
FFileHandle := CreateFileA(PAnsiChar('\\.\Scsi' + AnsiString(inttostr(devname)) + ':'),
GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE, nil,
OPEN_EXISTING, 0, 0);
try
if FFileHandle <> INVALID_HANDLE_VALUE then
begin
try
dword(pin) := dword(@buffer) + sizeof(SRB_IO_CONTROL); //<--- Fehler aus dem Titel
fillchar(buffer, sizeof (buffer), 0);
p.HeaderLength := sizeof (SRB_IO_CONTROL);
p.Timeout := 1000;
Da muss also irgendwo der Wurm drin sein. Mein Vermutung liegt bei den beiden dword-Befehlen, bin mir aber nicht sicher. Könnt Ihr mir anhand der paar Zeilen sagen, warum diese Zeile unter 64Bit nicht funktioniert ?