5 Appendix A: Full MS-DTYP IDL

msdn link

For ease of implementation and to allow re-use of the common data types and structure in other protocols, a full IDL is provided.

 typedef unsigned short wchar_t;
 typedef void* ADCONNECTION_HANDLE;
 typedef int BOOL, *PBOOL, *LPBOOL;
 typedef unsigned char BYTE, *PBYTE, *LPBYTE;
 typedef BYTE BOOLEAN, *PBOOLEAN;
 typedef wchar_t WCHAR, *PWCHAR;
 typedef WCHAR* BSTR;
 typedef char CHAR, *PCHAR;
 typedef double DOUBLE;
 typedef unsigned long DWORD, *PDWORD, *LPDWORD;
 typedef unsigned int DWORD32;
 typedef unsigned __int64 DWORD64, *PDWORD64;
 typedef unsigned __int64 ULONGLONG;
 typedef ULONGLONG DWORDLONG, *PDWORDLONG;
 typedef unsigned long error_status_t;
 typedef float FLOAT;
 typedef unsigned char UCHAR, *PUCHAR;
 typedef short SHORT;
  
 typedef void* HANDLE;  
 typedef DWORD HCALL;
 typedef int INT, *LPINT;
 typedef signed char INT8;
 typedef signed short INT16;
 typedef signed int INT32;
 typedef signed __int64 INT64;
 typedef void* LDAP_UDP_HANDLE;
 typedef const wchar_t* LMCSTR; 
 typedef WCHAR* LMSTR;
 typedef long LONG, *PLONG, *LPLONG;
 typedef signed __int64 LONGLONG;
 typedef LONG HRESULT;
  
 typedef __int3264 LONG_PTR;
 typedef unsigned __int3264 ULONG_PTR;
  
 typedef signed int LONG32;
 typedef signed __int64 LONG64, *PLONG64;
 typedef const char* LPCSTR;
 typedef const void* LPCVOID;
 typedef const wchar_t* LPCWSTR;
 typedef char* PSTR, *LPSTR;
  
 typedef wchar_t* LPWSTR, *PWSTR;
 typedef DWORD NET_API_STATUS;
 typedef long NTSTATUS;
 typedef [context_handle] void* PCONTEXT_HANDLE; 
 typedef [ref] PCONTEXT_HANDLE* PPCONTEXT_HANDLE;
  
 typedef unsigned __int64 QWORD;
 typedef void* RPC_BINDING_HANDLE;
 typedef UCHAR* STRING;
  
 typedef unsigned int UINT;
 typedef unsigned char UINT8;
 typedef unsigned short UINT16;
 typedef unsigned int UINT32;
 typedef unsigned __int64 UINT64;
 typedef unsigned long ULONG, *PULONG;
  
 typedef ULONG_PTR DWORD_PTR;
 typedef ULONG_PTR SIZE_T;
 typedef unsigned int ULONG32;
 typedef unsigned __int64 ULONG64;
 typedef wchar_t UNICODE;
 typedef unsigned short USHORT;
 typedef void VOID, *PVOID, *LPVOID;
 typedef unsigned short WORD, *PWORD, *LPWORD;
  
 typedef struct _FILETIME {
   DWORD dwLowDateTime;
   DWORD dwHighDateTime;
 } FILETIME, 
  *PFILETIME, 
  *LPFILETIME;
  
 typedef struct _GUID {
   unsigned long Data1;
   unsigned short Data2;
   unsigned short Data3;
   byte Data4[8];
 } GUID, 
   UUID, 
  *PGUID;
  
 typedef struct _LARGE_INTEGER {
   signed __int64 QuadPart;
 } LARGE_INTEGER, *PLARGE_INTEGER;
  
 typedef struct _EVENT_DESCRIPTOR {
   USHORT    Id;
   UCHAR     Version;
   UCHAR     Channel;
   UCHAR     Level;
   UCHAR     Opcode;
   USHORT    Task;
   ULONGLONG Keyword;
 } EVENT_DESCRIPTOR, 
  *PEVENT_DESCRIPTOR,
  *PCEVENT_DESCRIPTOR;
  
 typedef struct _EVENT_HEADER {
   USHORT           Size;
   USHORT           HeaderType;
   USHORT           Flags;
   USHORT           EventProperty;
   ULONG            ThreadId;
   ULONG            ProcessId;
   LARGE_INTEGER    TimeStamp;
   GUID             ProviderId;
   EVENT_DESCRIPTOR EventDescriptor;
   union {
     struct {
       ULONG KernelTime;
       ULONG UserTime;
     };
     ULONG64 ProcessorTime;
   };
   GUID             ActivityId;
 } EVENT_HEADER, 
  *PEVENT_HEADER;
  
 typedef DWORD LCID;
  
 typedef struct _LUID {
   DWORD LowPart;
   LONG HighPart;
 } LUID, 
  *PLUID;
  
 typedef struct _MULTI_SZ { 
   wchar_t* Value; 
   DWORD nChar; 
 } MULTI_SZ;
  
 typedef struct _RPC_UNICODE_STRING {
   unsigned short Length;
   unsigned short MaximumLength;
   [size_is(MaximumLength/2), length_is(Length/2)] 
     WCHAR* Buffer;
 } RPC_UNICODE_STRING, 
  *PRPC_UNICODE_STRING;
  
 typedef struct _SERVER_INFO_100 {
   DWORD sv100_platform_id;
   [string] wchar_t* sv100_name;
 } SERVER_INFO_100, 
  *PSERVER_INFO_100, 
  *LPSERVER_INFO_100;
  
 typedef struct _SERVER_INFO_101 {
   DWORD sv101_platform_id;
   [string] wchar_t* sv101_name;
   DWORD sv101_version_major;
   DWORD sv101_version_minor;
   DWORD sv101_version_type;
   [string] wchar_t* sv101_comment;
 } SERVER_INFO_101, 
  *PSERVER_INFO_101, 
  *LPSERVER_INFO_101;
  
 typedef struct _SYSTEMTIME {
   WORD wYear;
   WORD wMonth;
   WORD wDayOfWeek;
   WORD wDay;
   WORD wHour;
   WORD wMinute;
   WORD wSecond;
   WORD wMilliseconds;
 } SYSTEMTIME, 
  *PSYSTEMTIME;
  
 typedef struct _UINT128 {
   UINT64 lower;
   UINT64 upper;
 } UINT128, 
  *PUINT128;
  
 typedef struct _ULARGE_INTEGER {
     unsigned __int64 QuadPart;
 } ULARGE_INTEGER, *PULARGE_INTEGER;
  
 typedef struct _RPC_SID_IDENTIFIER_AUTHORITY {
   byte Value[6];
 } RPC_SID_IDENTIFIER_AUTHORITY;
  
 typedef DWORD ACCESS_MASK; 
 typedef ACCESS_MASK *PACCESS_MASK;
  
 typedef struct _OBJECT_TYPE_LIST {
   WORD Level;
   ACCESS_MASK Remaining;
   GUID* ObjectType;
 } OBJECT_TYPE_LIST, 
  *POBJECT_TYPE_LIST;
  
 typedef struct _ACE_HEADER {
   UCHAR AceType;
   UCHAR AceFlags;
   USHORT AceSize;
 } ACE_HEADER, 
  *PACE_HEADER;
  
 typedef struct _SYSTEM_MANDATORY_LABEL_ACE {
   ACE_HEADER Header;
   ACCESS_MASK Mask;
   DWORD SidStart;
 } SYSTEM_MANDATORY_LABEL_ACE, 
  *PSYSTEM_MANDATORY_LABEL_ACE;
  
 typedef struct _TOKEN_MANDATORY_POLICY {
   DWORD Policy;
 } TOKEN_MANDATORY_POLICY, 
  *PTOKEN_MANDATORY_POLICY;
  
 typedef struct _MANDATORY_INFORMATION {
   ACCESS_MASK AllowedAccess;
   BOOLEAN WriteAllowed;
   BOOLEAN ReadAllowed;
   BOOLEAN ExecuteAllowed;
   TOKEN_MANDATORY_POLICY MandatoryPolicy;
 } MANDATORY_INFORMATION, 
  *PMANDATORY_INFORMATION;
  
 typedef struct _CLAIM_SECURITY_ATTRIBUTE_OCTET_STRING_RELATIVE {
   DWORD Length;
   BYTE OctetString[];
 } CLAIM_SECURITY_ATTRIBUTE_OCTET_STRING_RELATIVE, 
  *PCLAIM_SECURITY_ATTRIBUTE_OCTET_STRING_RELATIVE;
  
 typedef struct _CLAIM_SECURITY_ATTRIBUTE_RELATIVE_V1 {
   DWORD Name;
   WORD ValueType;
   WORD Reserved;
   DWORD Flags;
   DWORD ValueCount;
   union {
     PLONG64 pInt64[];
     PDWORD64 pUint64[];
     PWSTR ppString[];
     PCLAIM_SECURITY_ATTRIBUTE_OCTET_STRING_RELATIVE pOctetString[];
   } Values;
 } CLAIM_SECURITY_ATTRIBUTE_RELATIVE_V1, 
  *PCLAIM_SECURITY_ATTRIBUTE_RELATIVE_V1;
  
  
 typedef DWORD SECURITY_INFORMATION, *PSECURITY_INFORMATION;
  
 typedef struct _RPC_SID {
   unsigned char Revision;
   unsigned char SubAuthorityCount;
   RPC_SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
   [size_is(SubAuthorityCount)] unsigned long SubAuthority[];
 } RPC_SID, 
  *PRPC_SID, 
  *PSID;
  
 typedef struct _ACL {
   unsigned char AclRevision;
   unsigned char Sbz1;
   unsigned short AclSize;
   unsigned short AceCount;
   unsigned short Sbz2;
 } ACL,
  *PACL;
  
 typedef struct _SECURITY_DESCRIPTOR {
   UCHAR Revision; 
   UCHAR Sbz1; 
   USHORT Control; 
   PSID Owner; 
   PSID Group; 
   PACL Sacl; 
   PACL Dacl; 
 } SECURITY_DESCRIPTOR, 
  *PSECURITY_DESCRIPTOR;