@@ -246,6 +246,14 @@ BcdMarkAsSystemStore(
246
246
_In_ HANDLE BcdStoreHandle
247
247
);
248
248
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
+
249
257
typedef enum _BCD_APPLICATION_OBJECT_TYPE
250
258
{
251
259
BCD_APPLICATION_OBJECT_NONE = 0 ,
@@ -279,12 +287,57 @@ typedef enum _BCD_INHERITED_CLASS_TYPE
279
287
BCD_INHERITED_CLASS_DEVICE
280
288
} BCD_INHERITED_CLASS_TYPE ;
281
289
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
+
282
335
#define BCD_OBJECT_DESCRIPTION_VERSION 0x1
283
336
284
337
typedef struct _BCD_OBJECT_DESCRIPTION
285
338
{
286
- ULONG Version ;
287
- ULONG Type ; // BCD_OBJECT_TYPE
339
+ ULONG Version ; // BCD_OBJECT_DESCRIPTION_VERSION
340
+ BCD_OBJECT_DATATYPE Type ; // BCD_OBJECT_DATATYPE
288
341
} BCD_OBJECT_DESCRIPTION , * PBCD_OBJECT_DESCRIPTION ;
289
342
290
343
typedef struct _BCD_OBJECT
@@ -441,6 +494,13 @@ typedef enum _BCD_ELEMENT_DEVICE_TYPE
441
494
#define MAKE_BCDE_DATA_TYPE (Class , Format , Subtype ) \
442
495
(((((ULONG)Class) & 0xF) << 28) | ((((ULONG)Format) & 0xF) << 24) | (((ULONG)Subtype) & 0x00FFFFFF))
443
496
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
+
444
504
typedef struct _BCD_ELEMENT_DATATYPE
445
505
{
446
506
union
@@ -549,46 +609,11 @@ typedef struct _BCD_ELEMENT_BOOLEAN
549
609
BOOLEAN Pad ;
550
610
} BCD_ELEMENT_BOOLEAN , * PBCD_ELEMENT_BOOLEAN ;
551
611
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
588
613
589
614
typedef struct BCD_ELEMENT_DESCRIPTION
590
615
{
591
- ULONG Version ; // BCD_OBJECT_DESCRIPTION_VERSION
616
+ ULONG Version ; // BCD_ELEMENT_DESCRIPTION_VERSION
592
617
ULONG Type ;
593
618
ULONG DataSize ;
594
619
} BCD_ELEMENT_DESCRIPTION , * PBCD_ELEMENT_DESCRIPTION ;
0 commit comments