Программирование драйверов Windows

         

Дополнительные описатели типов


В документации и примерах DDK можно видеть относительно новые способы задания типов данных, которые внедряются там примерно с тем же энтузиазмом и размахом, как ранее это происходило с так называемой венгерской нотацией.

Помимо типов данных, представляющих сложные данные (структуры и объединения, типа DRIVER_OBJECT), в драйверных исходных текстах широко применяются новые обозначения известных стандартных типов данных. Заголовочный файл ntdef.h содержит множество определений, которые придают новый вид старым и хорошо известным описателям типов языка С. Например, описатели беззнаковых целых типов и указателей на переменные такого типа принимают вид:

typedef unsigned char UCHAR; typedef unsigned short USHORT; typedef unsigned long ULONG; ....... typedef UCHAR *PUCHAR; typedef USHORT *PUSHORT; typedef ULONG *PULONG; ....... typedef unsigned __int64 ULONGLONG; ....... typedef ULONGLONG *PULONGLONG;

Для чего это затеяна эта игра? В основном &#8212 для унификации стиля, когда в обращение вводятся совершенно новые типы данных, которые не являются базисными для языка С, скажем типа WCHAR (двухбайтный Unicode символ), или типа данных (а на самом деле &#8212 объединения) LARGE_INTEGER, наиболее часто используемого при программировании таймерных объектов, например:

typedef union _LARGE_INTEGER { struct { ULONG LowPart; LONG HighPart; }; struct { ULONG LowPart; LONG HighPart; } u; LONGLONG QuadPart; } LARGE_INTEGER;

Другая цель этих дополнений &#8212 достичь универсальности исходных текстов при переходе с 32-разрядных платформ на 64-разрядные.



Содержание раздела