Mahlzeit,
ich sehe mich gerade mit einem C - Code konfrontiert, in dem u.a. Folgender Code steht (Nach Delphi übersetzt):
Delphi-Quellcode:
var
PT: SCSI_PASS_THROUGH_WITH_BUFFERS;
begin
// für ATA eigentlich unnötige SCSI-Parameter angeben
PT.spt.Length := sizeof(SCSI_PASS_THROUGH);
PT.spt.PathId := 0;
PT.spt.TargetId := 1;
PT.spt.Lun := 0;
PT.spt.CdbLength := CDB10GENERIC_LENGTH;
PT.spt.SenseInfoLength := 24;
PT.spt.TimeOutValue := 2;
PT.spt.SenseInfoOffset := FIELD_OFFSET(SCSI_PASS_THROUGH_WITH_BUFFERS, ucSenseBuf);
// Position der eigentlichen Daten
PT.spt.DataBufferOffset := FIELD_OFFSET(SCSI_PASS_THROUGH_WITH_BUFFERS, ucDataBuf);
ZeroMemory(PT.ucDataBuf, sizeof(PT.ucDataBuf));
Das ganze ist ein Code, der sich um das AAM von Festplatten kümmert.
Mich würde mal interessieren, was diese Zeile macht:
FIELD_OFFSET(SCSI_PASS_THROUGH_WITH_BUFFERS, ucSenseBuf);
Zu FIELD_OFFSET habe ich nur das hier im
PSDK gefunden:
Zitat:
Access all window and class data using FIELD_OFFSET.
It is common to
access window data using hard-coded offsets. This technique is not portable to 64-bit Windows. To make your code portable,
access your window and class data using the FIELD_OFFSET macro. Do not assume that the second pointer has an offset of 4.
Meine Fragen:
In welcher Headerdatei ist dieses Macro deklariert?
Gibt es ein Delphi - Äquivalent?