Это макрос, который обычно объявляется в заголовке Windows SDK, заголовочном файле BaseTsd.h.При компиляции в 32-битном режиме он определяется так, как вы показали.При компиляции в 64-битном режиме он определяется как
#define POINTER_32 __ptr32
, который является расширением компилятора MSVC для объявления 32-битных указателей в модели 64-битного кода.Существует также 64-битный вариант для 32-битного кода:
#define POINTER_64 __ptr64
Вы бы использовали его, если вы пишете 64-битную программу и вам нужно взаимодействовать со структурами, которые используются 32-битным кодом вдругой процесс.Например:
typedef struct _SCSI_PASS_THROUGH_DIRECT32 {
USHORT Length;
UCHAR ScsiStatus;
UCHAR PathId;
UCHAR TargetId;
UCHAR Lun;
UCHAR CdbLength;
UCHAR SenseInfoLength;
UCHAR DataIn;
ULONG DataTransferLength;
ULONG TimeOutValue;
VOID * POINTER_32 DataBuffer; // <== here
ULONG SenseInfoOffset;
UCHAR Cdb[16];
}SCSI_PASS_THROUGH_DIRECT32, *PSCSI_PASS_THROUGH_DIRECT32;