Skip to content

Commit 9bbc2b7

Browse files
committed
Update ntbcd.h
1 parent 6ecda98 commit 9bbc2b7

File tree

1 file changed

+64
-39
lines changed

1 file changed

+64
-39
lines changed

phnt/include/ntbcd.h

Lines changed: 64 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,14 @@ BcdMarkAsSystemStore(
246246
_In_ HANDLE BcdStoreHandle
247247
);
248248

249+
typedef enum _BCD_OBJECT_TYPE
250+
{
251+
BCD_OBJECT_TYPE_NONE,
252+
BCD_OBJECT_TYPE_APPLICATION,
253+
BCD_OBJECT_TYPE_INHERITED,
254+
BCD_OBJECT_TYPE_DEVICE
255+
} BCD_OBJECT_TYPE;
256+
249257
typedef enum _BCD_APPLICATION_OBJECT_TYPE
250258
{
251259
BCD_APPLICATION_OBJECT_NONE = 0,
@@ -279,12 +287,57 @@ typedef enum _BCD_INHERITED_CLASS_TYPE
279287
BCD_INHERITED_CLASS_DEVICE
280288
} BCD_INHERITED_CLASS_TYPE;
281289

290+
#define MAKE_BCD_APPLICATION_OBJECT(ImageType, ApplicationType) \
291+
(((ULONG)BCD_OBJECT_TYPE_APPLICATION << 28) | \
292+
(((ULONG)(ImageType) & 0xF) << 20) | \
293+
((ULONG)(ApplicationType) & 0xFFFFF))
294+
295+
#define GET_BCD_APPLICATION_IMAGE(DataType) \
296+
((BCD_APPLICATION_IMAGE_TYPE)(((((ULONG)DataType)) >> 20) & 0xF))
297+
#define GET_BCD_APPLICATION_OBJECT(DataType) \
298+
((BCD_APPLICATION_OBJECT_TYPE)((((ULONG)DataType)) & 0xFFFFF))
299+
300+
#define GET_BCD_OBJECT_TYPE(DataType) \
301+
((BCD_OBJECT_TYPE)(((((ULONG)DataType)) >> 28) & 0xF))
302+
303+
typedef union _BCD_OBJECT_DATATYPE
304+
{
305+
ULONG PackedValue;
306+
union
307+
{
308+
struct
309+
{
310+
ULONG Reserved : 28;
311+
BCD_OBJECT_TYPE ObjectType : 4;
312+
};
313+
struct
314+
{
315+
BCD_APPLICATION_OBJECT_TYPE ApplicationType : 20;
316+
BCD_APPLICATION_IMAGE_TYPE ImageType : 4;
317+
ULONG Reserved : 8;
318+
ULONG ObjectType : 4;
319+
} Application;
320+
struct
321+
{
322+
ULONG Value : 20;
323+
BCD_INHERITED_CLASS_TYPE Class : 4;
324+
ULONG Reserved : 4;
325+
ULONG ObjectType : 4;
326+
} Inherit;
327+
struct
328+
{
329+
ULONG Reserved : 28;
330+
ULONG ObjectType : 4;
331+
} Device;
332+
};
333+
} BCD_OBJECT_DATATYPE, *PBCD_OBJECT_DATATYPE;
334+
282335
#define BCD_OBJECT_DESCRIPTION_VERSION 0x1
283336

284337
typedef struct _BCD_OBJECT_DESCRIPTION
285338
{
286-
ULONG Version;
287-
ULONG Type; // BCD_OBJECT_TYPE
339+
ULONG Version; // BCD_OBJECT_DESCRIPTION_VERSION
340+
BCD_OBJECT_DATATYPE Type; // BCD_OBJECT_DATATYPE
288341
} BCD_OBJECT_DESCRIPTION, *PBCD_OBJECT_DESCRIPTION;
289342

290343
typedef struct _BCD_OBJECT
@@ -441,6 +494,13 @@ typedef enum _BCD_ELEMENT_DEVICE_TYPE
441494
#define MAKE_BCDE_DATA_TYPE(Class, Format, Subtype) \
442495
(((((ULONG)Class) & 0xF) << 28) | ((((ULONG)Format) & 0xF) << 24) | (((ULONG)Subtype) & 0x00FFFFFF))
443496

497+
#define GET_BCDE_DATA_CLASS(DataType) \
498+
((BCD_ELEMENT_DATATYPE_CLASS)(((((ULONG)DataType)) >> 28) & 0xF))
499+
#define GET_BCDE_DATA_FORMAT(DataType) \
500+
((BCD_ELEMENT_DATATYPE_FORMAT)(((((ULONG)DataType)) >> 24) & 0xF))
501+
#define GET_BCDE_DATA_SUBTYPE(DataType) \
502+
((ULONG)((((ULONG)DataType)) & 0x00FFFFFF))
503+
444504
typedef struct _BCD_ELEMENT_DATATYPE
445505
{
446506
union
@@ -549,46 +609,11 @@ typedef struct _BCD_ELEMENT_BOOLEAN
549609
BOOLEAN Pad;
550610
} BCD_ELEMENT_BOOLEAN, *PBCD_ELEMENT_BOOLEAN;
551611

552-
typedef enum _BCD_OBJECT_BASE_TYPE
553-
{
554-
BCD_OBJECT_BASE_TYPE_NONE,
555-
BCD_OBJECT_BASE_TYPE_APPLICATION,
556-
BCD_OBJECT_BASE_TYPE_INHERITED,
557-
BCD_OBJECT_BASE_TYPE_DEVICE
558-
} BCD_OBJECT_BASE_TYPE;
559-
560-
typedef union _BCD_UNPACKED_OBJECT_TYPE
561-
{
562-
ULONG PackedValue;
563-
union
564-
{
565-
ULONG Reserved : 28;
566-
ULONG ObjectType : 4;
567-
struct
568-
{
569-
ULONG Type : 20;
570-
ULONG ImageType : 4;
571-
ULONG Reserved : 4;
572-
ULONG ObjectType : 4;
573-
} Application;
574-
struct
575-
{
576-
ULONG Value : 20;
577-
ULONG Class : 4;
578-
ULONG Reserved : 4;
579-
ULONG ObjectType : 4;
580-
} Inherit;
581-
struct
582-
{
583-
ULONG Reserved : 28;
584-
ULONG ObjectType : 4;
585-
} Device;
586-
};
587-
} BCD_UNPACKED_OBJECT_TYPE, *PBCD_UNPACKED_OBJECT_TYPE;
612+
#define BCD_ELEMENT_DESCRIPTION_VERSION 0x1
588613

589614
typedef struct BCD_ELEMENT_DESCRIPTION
590615
{
591-
ULONG Version; // BCD_OBJECT_DESCRIPTION_VERSION
616+
ULONG Version; // BCD_ELEMENT_DESCRIPTION_VERSION
592617
ULONG Type;
593618
ULONG DataSize;
594619
} BCD_ELEMENT_DESCRIPTION, *PBCD_ELEMENT_DESCRIPTION;

0 commit comments

Comments
 (0)