typedef struct _OBJECT_TYPE_INITIALIZER
{
    unsigned short Length;
    union
    {
        unsigned char ObjectTypeFlags;
        struct
        {
            unsigned char CaseInsensitive : 1;
            unsigned char UnnamedObjectsOnly : 1;
            unsigned char UseDefaultObject : 1;
            unsigned char SecurityRequired : 1;
            unsigned char MaintainHandleCount : 1;
            unsigned char MaintainTypeList : 1;
            unsigned char SupportsObjectCallbacks : 1;
            unsigned char CacheAligned : 1;
        };
    };
    unsigned long ObjectTypeCode;
    unsigned long InvalidAttributes;
    GENERIC_MAPPING GenericMapping;
    unsigned long ValidAccessMask;
    unsigned long RetainAccess;
    POOL_TYPE PoolType;
    unsigned long DefaultPagedPoolCharge;
    unsigned long DefaultNonPagedPoolCharge;
    void (*DumpProcedure)(void *, OBJECT_DUMP_CONTROL *);
    long (*OpenProcedure)(OB_OPEN_REASON, char, EPROCESS *, void *, unsigned long *, unsigned long);
    void (*CloseProcedure)(EPROCESS *, void *, unsigned __int64, unsigned __int64);
    void (*DeleteProcedure)(void *);
    long (*ParseProcedure)(void *, void *, ACCESS_STATE *, char, unsigned long, UNICODE_STRING *, UNICODE_STRING *, void *, SECURITY_QUALITY_OF_SERVICE *, void **);
    long (*SecurityProcedure)(void *, SECURITY_OPERATION_CODE, unsigned long *, void *, unsigned long *, void **, POOL_TYPE, GENERIC_MAPPING *, char);
    long (*QueryNameProcedure)(void *, unsigned char, OBJECT_NAME_INFORMATION *, unsigned long, unsigned long *, char);
    unsigned char (*OkayToCloseProcedure)(EPROCESS *, void *, void *, char);
} OBJECT_TYPE_INITIALIZER, *POBJECT_TYPE_INITIALIZER;