Я думаю, что есть разумные доказательства того, что кто-то допустил простую ошибку, когда написал первоначальное определение структуры DISK_DETECTION_INFO
. Эта ошибка вырвалась в дикую природу, и было слишком поздно, чтобы исправить это.
Определение в заголовочном файле:
typedef struct _DISK_DETECTION_INFO {
DWORD SizeOfDetectInfo;
DETECTION_TYPE DetectionType;
union {
struct {
//
// If DetectionType == DETECTION_INT13 then we have just the Int13
// information.
//
DISK_INT13_INFO Int13;
//
// If DetectionType == DETECTION_EX_INT13, then we have the
// extended int 13 information.
//
DISK_EX_INT13_INFO ExInt13; // If DetectionType == DetectExInt13
} DUMMYSTRUCTNAME;
} DUMMYUNIONNAME;
} DISK_DETECTION_INFO, *PDISK_DETECTION_INFO;
Документация гласит:
Если для DetectionType установлено значение DetectInt13, объединение представляет собой структуру DISK_INT13_ INFO.
Если DetectionType имеет тип DetectExInt13, объединение представляет собой структуру DISK_EX_ INT13_INFO.
Таким образом, представляется весьма вероятным, что первоначальное намерение состояло в том, чтобы DISK_INT13_INFO
и DISK_EX_INT13_INFO
были объединены в союз, поскольку они являются взаимоисключающими.