Skip to content

Instantly share code, notes, and snippets.

@leechristensen
Created November 8, 2024 21:22
Show Gist options
  • Save leechristensen/d6c036a694c0b6ef2ed9b9b4012489bc to your computer and use it in GitHub Desktop.
Save leechristensen/d6c036a694c0b6ef2ed9b9b4012489bc to your computer and use it in GitHub Desktop.
Example of using NtObjectManager to parse RPC server method

These commands demonstrate how you can extract RPC server information from Windows binary. This data is embed inside of any Windows RPC server binary and includes general information about the RPC server and the methods it exposes(including parameter counts and type/struct info).

Run all these commands in a PowerShell window.

Install NtObjectManager

In a PowerShell window, install NtObjectManager:

Install-Module NtObjectManager -Scope CurrentUser

Optional: Enable function symbol resolution (will resolve RPC methods to a name):

Set-GlobalSymbolResolver -DbgHelpPath "C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\dbghelp.dll"

Parse the RPC server info from a binary

$rpc_servers = Get-RpcServer -Path C:\Windows\System32\services.exe

Show basic info about the RPC servers contained in the binary

$rpc_servers

Output:

Name         UUID                                 Ver Procs EPs Service Running
----         ----                                 --- ----- --- ------- -------
services.exe a2c45f7c-7d32-46ad-96f5-adafb486be74 1.0 3     0           False
services.exe 367abb81-9844-35f1-ad32-98f038001003 2.0 69    1           False

Display procedure details

PS C:\> $ms_scmr = $rpc_servers[1]
PS C:\> $ms_scmr.ProcedureCount
69
PS C:\> $ms_scmr.Procedures[0]


Name                     : Proc0
Params                   : {FC_BIND_CONTEXT - NdrContextHandleTypeReference - IsIn, IsOut, IsSimpleRef}
ReturnValue              : FC_LONG - NdrSimpleTypeReference - IsOut, IsReturn, IsBasetype
Handle                   : FC_POINTER - NdrPointerTypeReference - IsIn, IsOut
RpcFlags                 : 0
ProcNum                  : 0
StackSize                : 16
HasAsyncHandle           : False
DispatchFunction         : 140701720362432
DispatchOffset           : 179648
InterpreterFlags         : HasReturn, HasExtensions
ConstantClientBufferSize : 56
ConstantServerBufferSize : 64



PS C:\> $ms_scmr.Procedures[0].Params


Attributes      : IsIn, IsOut, IsSimpleRef
Type            : FC_BIND_CONTEXT - NdrContextHandleTypeReference
ServerAllocSize : 0
Offset          : 0
Name            : p0
IsIn            : True
IsOut           : True
IsInOut         : True
IsSimpleRef     : True
IsPipe          : False


# Display the parameters. Note that this includes the number of parameters as well as type information.
PS C:\> $ms_scmr.Procedures[1].Params


Attributes      : IsIn
Type            : FC_BIND_CONTEXT - NdrContextHandleTypeReference
ServerAllocSize : 0
Offset          : 0
Name            : p0
IsIn            : True
IsOut           : False
IsInOut         : False
IsSimpleRef     : False
IsPipe          : False

Attributes      : IsIn, IsBasetype
Type            : FC_LONG - NdrSimpleTypeReference
ServerAllocSize : 0
Offset          : 8
Name            : p1
IsIn            : True
IsOut           : False
IsInOut         : False
IsSimpleRef     : False
IsPipe          : False

Attributes      : MustFree, IsOut, IsSimpleRef
Type            : FC_STRUCT - NdrSimpleStructureTypeReference
ServerAllocSize : 32
Offset          : 16
Name            : p2
IsIn            : False
IsOut           : True
IsInOut         : False
IsSimpleRef     : True
IsPipe          : False

Generate an IDL for the RPC server

$ms_scmr | Format-RpcServer

You can add the -RemoveComments parameter as well to clean up some of the IDL (removes some context, though).

Output:

// DllOffset: 0xA1770
// DllPath C:\Windows\System32\services.exe
// Endpoints: 1
// ncacn_ip_tcp:[50370]

typedef union Union_8 _Union_8;
typedef struct Struct_9 _Struct_9;
typedef struct Struct_10 _Struct_10;
typedef struct Struct_12 _Struct_12;
typedef struct Struct_13 _Struct_13;
typedef struct Struct_14 _Struct_14;
typedef struct Struct_18 _Struct_18;
typedef struct Struct_19 _Struct_19;
typedef struct Struct_11 _Struct_11;
typedef struct Struct_15 _Struct_15;
typedef struct Struct_17 _Struct_17;
typedef union Union_21 _Union_21;
typedef struct Struct_22 _Struct_22;
typedef struct Struct_23 _Struct_23;
typedef struct Struct_25 _Struct_25;
typedef struct Struct_26 _Struct_26;
typedef struct Struct_28 _Struct_28;
typedef struct Struct_29 _Struct_29;
typedef struct Struct_30 _Struct_30;
typedef struct Struct_31 _Struct_31;
typedef union Union_33 _Union_33;
typedef struct Struct_34 _Struct_34;
typedef struct Struct_36 _Struct_36;
typedef struct Struct_35 _Struct_35;
typedef struct Struct_32 _Struct_32;
typedef struct Struct_39 _Struct_39;
typedef struct Struct_41 _Struct_41;
typedef struct Struct_43 _Struct_43;
typedef struct Struct_46 _Struct_46;
typedef struct Struct_0 _Struct_0;
typedef struct Struct_1 _Struct_1;
typedef struct Struct_2 _Struct_2;
typedef struct Struct_3 _Struct_3;
typedef struct Struct_4 _Struct_4;
typedef struct Struct_5 _Struct_5;
typedef struct Struct_6 _Struct_6;
typedef struct Struct_7 _Struct_7;
typedef struct Struct_20 _Struct_20;
typedef union Union_24 _Union_24;
typedef union Union_27 _Union_27;
typedef struct Struct_37 _Struct_37;
typedef union Union_38 _Union_38;
typedef union Union_40 _Union_40;
typedef union Union_42 _Union_42;
typedef union Union_44 _Union_44;
typedef union Union_45 _Union_45;
typedef [context_handle] void* _STRICT_CONTEXT_HANDLE_0;


struct Struct_0 {
    int Member0;
    int Member4;
    int Member8;
    int MemberC;
    int Member10;
    int Member14;
    int Member18;
};

struct Struct_1 {
    int Member0;
    int Member4;
    int Member8;
    [unique, string, range(0, 8192)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 8192) */ wchar_t* Member10;
    [unique, string, range(0, 8192)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 8192) */ wchar_t* Member18;
    int Member20;
    [unique, string, range(0, 8192)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 8192) */ wchar_t* Member28;
    [unique, string, range(0, 8192)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 8192) */ wchar_t* Member30;
    [unique, string, range(0, 8192)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 8192) */ wchar_t* Member38;
};

struct Struct_2 {
    int Member0;
    [unique, string, range(0, 8192)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 8192) */ wchar_t* Member8;
    int Member10;
};

struct Struct_3 {
    [unique, string, range(0, 1024)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 1024) */ wchar_t* Member0;
};

struct Struct_4 {
    int Member0;
    int Member4;
    int Member8;
    [unique, string, range(0, 8192)] /* unique */ /* FC_SUPPLEMENT FC_C_CSTRING Range(0, 8192) */ char* Member10;
    [unique, string, range(0, 8192)] /* unique */ /* FC_SUPPLEMENT FC_C_CSTRING Range(0, 8192) */ char* Member18;
    int Member20;
    [unique, string, range(0, 8192)] /* unique */ /* FC_SUPPLEMENT FC_C_CSTRING Range(0, 8192) */ char* Member28;
    [unique, string, range(0, 8192)] /* unique */ /* FC_SUPPLEMENT FC_C_CSTRING Range(0, 8192) */ char* Member30;
    [unique, string, range(0, 8192)] /* unique */ /* FC_SUPPLEMENT FC_C_CSTRING Range(0, 8192) */ char* Member38;
};

struct Struct_5 {
    int Member0;
    [unique, string, range(0, 8192)] /* unique */ /* FC_SUPPLEMENT FC_C_CSTRING Range(0, 8192) */ char* Member8;
    int Member10;
};

struct Struct_6 {
    [unique, string, range(0, 1024)] /* unique */ /* FC_SUPPLEMENT FC_C_CSTRING Range(0, 1024) */ char* Member0;
};

struct Struct_7 {
    int Member0;
    [switch_is(Member0)] _Union_8 Member8;
};

[switch_type(unsigned int)] union Union_8 {
    [case(1)]
    [unique] /* unique */ _Struct_9* Arm_1;
    [case(2)]
    [unique] /* unique */ _Struct_10* Arm_2;
    [case(3)]
    [unique] /* unique */ _Struct_12* Arm_3;
    [case(4)]
    [unique] /* unique */ _Struct_12* Arm_4;
    [case(5)]
    [unique] /* unique */ _Struct_12* Arm_5;
    [case(6)]
    [unique] /* unique */ _Struct_13* Arm_6;
    [case(7)]
    [unique] /* unique */ _Struct_12* Arm_7;
    [case(8)]
    [unique] /* unique */ _Struct_14* Arm_8;
    [case(9)]
    [unique] /* unique */ _Struct_18* Arm_9;
    [case(11)]
    [unique] /* unique */ _Struct_19* Arm_11;
    [case(12)]
    [unique] /* unique */ _Struct_12* Arm_12;
};

struct Struct_9 {
    [unique, string, range(0, 8192)] /* unique */ /* FC_SUPPLEMENT FC_C_CSTRING Range(0, 8192) */ char* Member0;
};

struct Struct_10 {
    int Member0;
    [unique, string, range(0, 8192)] /* unique */ /* FC_SUPPLEMENT FC_C_CSTRING Range(0, 8192) */ char* Member8;
    [unique, string, range(0, 8192)] /* unique */ /* FC_SUPPLEMENT FC_C_CSTRING Range(0, 8192) */ char* Member10;
    [range(0, 1024)] int Member18;
    [unique, size_is(Member18)] _Struct_11 Member20[];
};

struct Struct_11 {
    int Member0;
    int Member4;
};

struct Struct_12 {
    int Member0;
};

struct Struct_13 {
    [range(0, 4096)] int Member0;
    [unique, size_is(Member0)] byte Member8[];
};

struct Struct_14 {
    [range(0, 64)] int Member0;
    [unique, size_is(Member0)] _Struct_15 Member8[];
    [unique] /* unique */ byte* Member10;
};

struct Struct_15 {
    int Member0;
    int Member4;
    [unique] /* unique */ GUID* Member8;
    [range(0, 64)] int Member10;
    [unique, size_is(Member10)] _Struct_17 Member18[];
};

struct Struct_17 {
    int Member0;
    [range(0, 1024)] int Member4;
    [unique, size_is(Member4)] byte Member8[];
};

struct Struct_18 {
    short Member0;
    byte Member2;
};

struct Struct_19 {
    byte Member0;
};

struct Struct_20 {
    int Member0;
    [switch_is(Member0)] _Union_21 Member8;
};

[switch_type(unsigned int)] union Union_21 {
    [case(1)]
    [unique] /* unique */ _Struct_22* Arm_1;
    [case(2)]
    [unique] /* unique */ _Struct_23* Arm_2;
    [case(3)]
    [unique] /* unique */ _Struct_12* Arm_3;
    [case(4)]
    [unique] /* unique */ _Struct_12* Arm_4;
    [case(5)]
    [unique] /* unique */ _Struct_12* Arm_5;
    [case(6)]
    [unique] /* unique */ _Struct_13* Arm_6;
    [case(7)]
    [unique] /* unique */ _Struct_12* Arm_7;
    [case(8)]
    [unique] /* unique */ _Struct_14* Arm_8;
    [case(9)]
    [unique] /* unique */ _Struct_18* Arm_9;
    [case(11)]
    [unique] /* unique */ _Struct_19* Arm_11;
    [case(12)]
    [unique] /* unique */ _Struct_12* Arm_12;
};

struct Struct_22 {
    [unique, string, range(0, 8192)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 8192) */ wchar_t* Member0;
};

struct Struct_23 {
    int Member0;
    [unique, string, range(0, 8192)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 8192) */ wchar_t* Member8;
    [unique, string, range(0, 8192)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 8192) */ wchar_t* Member10;
    [range(0, 1024)] int Member18;
    [unique, size_is(Member18)] _Struct_11 Member20[];
};

[switch_type(unsigned int)] union Union_24 {
    [case(1)]
    [unique] /* unique */ _Struct_25* Arm_1;
    [case(2)]
    [unique] /* unique */ _Struct_26* Arm_2;
    [case(3)]
    [unique] /* unique */ _Struct_12* Arm_3;
};

struct Struct_25 {
    int Member0;
    int Member4;
};

struct Struct_26 {
    int Member0;
    [unique, string, range(0, 8192)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 8192) */ wchar_t* Member8;
};

[switch_type(unsigned int)] union Union_27 {
    [case(1)]
    [unique] /* unique */ _Struct_28* Arm_1;
    [case(2)]
    [unique] /* unique */ _Struct_29* Arm_2;
    [case(3)]
    [unique] /* unique */ _Struct_30* Arm_3;
};

struct Struct_28 {
    int Member0;
    [unique, string, range(0, 8192)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 8192) */ wchar_t* Member8;
};

struct Struct_29 {
    int Member0;
    [unique, string, range(0, 8192)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 8192) */ wchar_t* Member8;
};

struct Struct_30 {
    [range(0, 4096)] int Member0;
    [unique, size_is(Member0)] _Struct_31 Member8[];
};

struct Struct_31 {
    int Member0;
    int Member4;
    [unique, string, range(0, 8192)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 8192) */ wchar_t* Member8;
    [unique, string, range(0, 8192)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 8192) */ wchar_t* Member10;
};

struct Struct_32 {
    int Member0;
    [switch_is(Member0)] _Union_33 Member8;
};

[switch_type(unsigned int)] union Union_33 {
    [case(1)]
    [unique] /* unique */ _Struct_34* Arm_1;
    [case(2)]
    [unique] /* unique */ _Struct_36* Arm_2;
};

struct Struct_34 {
    __int64 Member0;
    int Member8;
    byte MemberC[16];
    byte Member1C[16];
    _Struct_35 Member2C;
    int Member50;
    int Member54;
};

struct Struct_35 {
    int Member0;
    int Member4;
    int Member8;
    int MemberC;
    int Member10;
    int Member14;
    int Member18;
    int Member1C;
    int Member20;
};

struct Struct_36 {
    __int64 Member0;
    int Member8;
    byte MemberC[16];
    byte Member1C[16];
    _Struct_35 Member2C;
    int Member50;
    int Member54;
    int Member58;
    [unique, string, range(0, 65536)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 65536) */ wchar_t* Member60;
};

struct Struct_37 {
    [range(0, 4096)] int Member0;
    [size_is(Member0)] _Struct_32 Member8[];
};

[switch_type(unsigned int)] union Union_38 {
    [case(1)]
    [unique] /* unique */ _Struct_39* Arm_1;
};

struct Struct_39 {
    int Member0;
    [unique, string, range(0, 128)] /* unique */ /* FC_SUPPLEMENT FC_C_CSTRING Range(0, 128) */ char* Member8;
};

[switch_type(unsigned int)] union Union_40 {
    [case(1)]
    [unique] /* unique */ _Struct_41* Arm_1;
};

struct Struct_41 {
    _Struct_35 Member0;
};

[switch_type(unsigned int)] union Union_42 {
    [case(1)]
    [unique] /* unique */ _Struct_43* Arm_1;
};

struct Struct_43 {
    int Member0;
    [unique, string, range(0, 128)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 128) */ wchar_t* Member8;
};

[switch_type(unsigned int)] union Union_44 {
    [case(1)]
    [unique] /* unique */ _Struct_41* Arm_1;
};

[switch_type(unsigned int)] union Union_45 {
    [case(1)]
    [unique] /* unique */ _Struct_46* Arm_1;
    [case(2)]
    [unique] /* unique */ __int64* Arm_2;
    [case(3)]
    [unique] /* unique */ __int64* Arm_3;
    [case(4)]
    [unique] /* unique */ __int64* Arm_4;
};

struct Struct_46 {
    [unique, string, range(0, 8192)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 8192) */ wchar_t* Member0;
    [unique, string, range(0, 8192)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 8192) */ wchar_t* Member8;
    [unique, string, range(0, 8192)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 8192) */ wchar_t* Member10;
};

[
  uuid(367ABB81-9844-35F1-AD32-98F038001003),
  version(2.0)
]
interface intf_367abb81_9844_35f1_ad32_98f038001003 {
    int Proc0([in, out, context_handle] _STRICT_CONTEXT_HANDLE_0* p0);
    int Proc1([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in] int p1, [out] _Struct_0* p2);
    int Proc2([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0);
    int Proc3([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [out, context_handle] _STRICT_CONTEXT_HANDLE_0* p1);
    int Proc4([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in] int p1, [out, size_is(p3)] byte* p2[], [range(0, 262144), in] /* range: 0,262144 */ int p3, [out, range(0, 262144)] /* range: 0,262144 */ int* p4);
    int Proc5([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in] int p1, [in, size_is(p3)] byte* p2[], [in] int p3);
    int Proc6([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [out] _Struct_0* p1);
    int Proc7([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in] _Struct_0* p1);
    int Proc8([in, out, context_handle] _STRICT_CONTEXT_HANDLE_0* p0);
    int Proc9([in, unique, string, range(0, 1024)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 1024) */ wchar_t* p0, [in] int p1);
    int Proc10([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in] int p1, [in] int p2, [in] int p3, [in, unique, string, range(0, 257)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 257) */ wchar_t* p4);
    int Proc11([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in] int p1, [in] int p2, [in] int p3, [in, unique, string, range(0, 32768)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 32768) */ wchar_t* p4, [in, unique, string, range(0, 257)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 257) */ wchar_t* p5, [in, out, unique] /* unique */ int* p6, [in, unique, size_is(p8)] byte p7[], [range(0, 4096), in] /* range: 0,4096 */ int p8, [in, unique, string, range(0, 2048)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 2048) */ wchar_t* p9, [in, unique, size_is(p11)] byte p10[], [range(0, 514), in] /* range: 0,514 */ int p11, [in, unique, string, range(0, 257)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 257) */ wchar_t* p12);
    int Proc12([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in, string, range(0, 257)] /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 257) */ wchar_t* p1, [in, unique, string, range(0, 257)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 257) */ wchar_t* p2, [in] int p3, [in] int p4, [in] int p5, [in] int p6, [in, string, range(0, 32768)] /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 32768) */ wchar_t* p7, [in, unique, string, range(0, 257)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 257) */ wchar_t* p8, [in, out, unique] /* unique */ int* p9, [in, unique, size_is(p11)] byte p10[], [range(0, 4096), in] /* range: 0,4096 */ int p11, [in, unique, string, range(0, 2048)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 2048) */ wchar_t* p12, [in, unique, size_is(p14)] byte p13[], [range(0, 514), in] /* range: 0,514 */ int p14, [out, context_handle] _STRICT_CONTEXT_HANDLE_0* p15);
    int Proc13([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in] int p1, [out, size_is(p3)] byte* p2[], [range(0, 262144), in] /* range: 0,262144 */ int p3, [out, range(0, 262144)] /* range: 0,262144 */ int* p4, [out, range(0, 262144)] /* range: 0,262144 */ int* p5);
    int Proc14([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in] int p1, [in] int p2, [out, size_is(p4)] byte* p3[], [range(0, 262144), in] /* range: 0,262144 */ int p4, [out, range(0, 262144)] /* range: 0,262144 */ int* p5, [out, range(0, 262144)] /* range: 0,262144 */ int* p6, [in, out, unique, range(0, 262144)] /* unique */ /* range: 0,262144 */ int* p7);
    int Proc15([in, unique, string, range(0, 1024)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 1024) */ wchar_t* p0, [in, unique, string, range(0, 257)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 257) */ wchar_t* p1, [in] int p2, [out, context_handle] _STRICT_CONTEXT_HANDLE_0* p3);
    int Proc16([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in, string, range(0, 257)] /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 257) */ wchar_t* p1, [in] int p2, [out, context_handle] _STRICT_CONTEXT_HANDLE_0* p3);
    int Proc17([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [out] /* FC_BYTE_COUNT_POINTER (FC_TOP_LEVEL_CONFORMANCE)(16)(FC_ZERO)(FC_LONG)(0) */ _Struct_1* p1, [in, range(0, 8192)] /* range: 0,8192 */ int p2, [out, range(0, 8192)] /* range: 0,8192 */ int* p3);
    int Proc18([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [out] /* FC_BYTE_COUNT_POINTER (FC_TOP_LEVEL_CONFORMANCE)(16)(FC_ZERO)(FC_LONG)(0) */ _Struct_2* p1, [in, range(0, 4096)] /* range: 0,4096 */ int p2, [out, range(0, 4096)] /* range: 0,4096 */ int* p3);
    int Proc19([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in, range(0, 1024)] /* range: 0,1024 */ int p1, [in, unique, size_is(p1)] _Struct_3 p2[]);
    int Proc20([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in, string, range(0, 257)] /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 257) */ wchar_t* p1, [out, string, size_is((*p3 + 1))] /* (FC_TOP_LEVEL_CONFORMANCE)(0)((*VAR{24} + 1))(FC_ZERO)(Range) */ wchar_t* p2, [in, out] int* p3);
    int Proc21([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in, string, range(0, 257)] /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 257) */ wchar_t* p1, [out, string, size_is((*p3 + 1))] /* (FC_TOP_LEVEL_CONFORMANCE)(1)((*VAR{24} + 1))(FC_ZERO)(Range) */ wchar_t* p2, [in, out] int* p3);
    int Proc22([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in] int p1, [in] int p2, [in] int p3, [in, out, unique, string, range(0, 257)] /* unique */ /* FC_SUPPLEMENT FC_C_CSTRING Range(0, 257) */ char* p4);
    int Proc23([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in] int p1, [in] int p2, [in] int p3, [in, unique, string, range(0, 32768)] /* unique */ /* FC_SUPPLEMENT FC_C_CSTRING Range(0, 32768) */ char* p4, [in, unique, string, range(0, 257)] /* unique */ /* FC_SUPPLEMENT FC_C_CSTRING Range(0, 257) */ char* p5, [in, out, unique] /* unique */ int* p6, [in, unique, size_is(p8)] byte p7[], [range(0, 4096), in] /* range: 0,4096 */ int p8, [in, unique, string, range(0, 2048)] /* unique */ /* FC_SUPPLEMENT FC_C_CSTRING Range(0, 2048) */ char* p9, [in, unique, size_is(p11)] byte p10[], [range(0, 514), in] /* range: 0,514 */ int p11, [in, unique, string, range(0, 257)] /* unique */ /* FC_SUPPLEMENT FC_C_CSTRING Range(0, 257) */ char* p12);
    int Proc24([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in, string, range(0, 257)] /* FC_SUPPLEMENT FC_C_CSTRING Range(0, 257) */ char* p1, [in, unique, string, range(0, 257)] /* unique */ /* FC_SUPPLEMENT FC_C_CSTRING Range(0, 257) */ char* p2, [in] int p3, [in] int p4, [in] int p5, [in] int p6, [in, string, range(0, 32768)] /* FC_SUPPLEMENT FC_C_CSTRING Range(0, 32768) */ char* p7, [in, unique, string, range(0, 257)] /* unique */ /* FC_SUPPLEMENT FC_C_CSTRING Range(0, 257) */ char* p8, [in, out, unique] /* unique */ int* p9, [in, unique, size_is(p11)] byte p10[], [range(0, 4096), in] /* range: 0,4096 */ int p11, [in, unique, string, range(0, 2048)] /* unique */ /* FC_SUPPLEMENT FC_C_CSTRING Range(0, 2048) */ char* p12, [in, unique, size_is(p14)] byte p13[], [range(0, 514), in] /* range: 0,514 */ int p14, [out, context_handle] _STRICT_CONTEXT_HANDLE_0* p15);
    int Proc25([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in] int p1, [out, size_is(p3)] byte* p2[], [range(0, 262144), in] /* range: 0,262144 */ int p3, [out, range(0, 262144)] /* range: 0,262144 */ int* p4, [out, range(0, 262144)] /* range: 0,262144 */ int* p5);
    int Proc26([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in] int p1, [in] int p2, [out, size_is(p4)] byte* p3[], [range(0, 262144), in] /* range: 0,262144 */ int p4, [out, range(0, 262144)] /* range: 0,262144 */ int* p5, [out, range(0, 262144)] /* range: 0,262144 */ int* p6, [in, out, unique, range(0, 262144)] /* unique */ /* range: 0,262144 */ int* p7);
    int Proc27([in, unique, string, range(0, 1024)] /* unique */ /* FC_SUPPLEMENT FC_C_CSTRING Range(0, 1024) */ char* p0, [in, unique, string, range(0, 257)] /* unique */ /* FC_SUPPLEMENT FC_C_CSTRING Range(0, 257) */ char* p1, [in] int p2, [out, context_handle] _STRICT_CONTEXT_HANDLE_0* p3);
    int Proc28([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in, string, range(0, 257)] /* FC_SUPPLEMENT FC_C_CSTRING Range(0, 257) */ char* p1, [in] int p2, [out, context_handle] _STRICT_CONTEXT_HANDLE_0* p3);
    int Proc29([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [out] /* FC_BYTE_COUNT_POINTER (FC_TOP_LEVEL_CONFORMANCE)(16)(FC_ZERO)(FC_LONG)(0) */ _Struct_4* p1, [in, range(0, 8192)] /* range: 0,8192 */ int p2, [out, range(0, 8192)] /* range: 0,8192 */ int* p3);
    int Proc30([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [out] /* FC_BYTE_COUNT_POINTER (FC_TOP_LEVEL_CONFORMANCE)(16)(FC_ZERO)(FC_LONG)(0) */ _Struct_5* p1, [in, range(0, 4096)] /* range: 0,4096 */ int p2, [out, range(0, 4096)] /* range: 0,4096 */ int* p3);
    int Proc31([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in, range(0, 1024)] /* range: 0,1024 */ int p1, [in, unique, size_is(p1)] _Struct_6 p2[]);
    int Proc32([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in, string, range(0, 257)] /* FC_SUPPLEMENT FC_C_CSTRING Range(0, 257) */ char* p1, [out, string, size_is(*p3)] /* (FC_TOP_LEVEL_CONFORMANCE)(24)(FC_DEREFERENCE)(FC_ULONG)(Range) */ char* p2, [range(0, 4096), in, out] /* range: 0,4096 */ int* p3);
    int Proc33([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in, string, range(0, 257)] /* FC_SUPPLEMENT FC_C_CSTRING Range(0, 257) */ char* p1, [out, string, size_is(*p3)] /* (FC_TOP_LEVEL_CONFORMANCE)(24)(FC_DEREFERENCE)(FC_ULONG)(Range) */ char* p2, [range(0, 4096), in, out] /* range: 0,4096 */ int* p3);
    int Proc34([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in, unique, string, range(0, 257)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 257) */ wchar_t* p1, [out, range(0, 4096)] /* range: 0,4096 */ int* p2);
    int Proc35([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in] int p1, [in] int p2, [out, size_is(p4)] byte* p3[], [range(0, 262144), in] /* range: 0,262144 */ int p4, [out, range(0, 262144)] /* range: 0,262144 */ int* p5, [out, range(0, 262144)] /* range: 0,262144 */ int* p6, [in, out, unique, range(0, 262144)] /* unique */ /* range: 0,262144 */ int* p7, [in, unique, string, range(0, 257)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 257) */ wchar_t* p8);
    int Proc36([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in] _Struct_7* p1);
    int Proc37([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in] _Struct_20* p1);
    int Proc38([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in] int p1, [out, size_is(p3)] byte* p2[], [range(0, 8192), in] /* range: 0,8192 */ int p3, [out, range(0, 8192)] /* range: 0,8192 */ int* p4);
    int Proc39([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in] int p1, [out, size_is(p3)] byte* p2[], [range(0, 8192), in] /* range: 0,8192 */ int p3, [out, range(0, 8192)] /* range: 0,8192 */ int* p4);
    int Proc40([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in] int p1, [out, size_is(p3)] byte* p2[], [range(0, 8192), in] /* range: 0,8192 */ int p3, [out, range(0, 8192)] /* range: 0,8192 */ int* p4);
    int Proc41([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in] int p1, [in] int p2, [in] int p3, [out, size_is(p5)] byte* p4[], [range(0, 262144), in] /* range: 0,262144 */ int p5, [out, range(0, 262144)] /* range: 0,262144 */ int* p6, [out, range(0, 262144)] /* range: 0,262144 */ int* p7, [in, out, unique, range(0, 262144)] /* unique */ /* range: 0,262144 */ int* p8, [in, unique, string, range(0, 257)] /* unique */ /* FC_SUPPLEMENT FC_C_CSTRING Range(0, 257) */ char* p9);
    int Proc42([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in] int p1, [in] int p2, [in] int p3, [out, size_is(p5)] byte* p4[], [range(0, 262144), in] /* range: 0,262144 */ int p5, [out, range(0, 262144)] /* range: 0,262144 */ int* p6, [out, range(0, 262144)] /* range: 0,262144 */ int* p7, [in, out, unique, range(0, 262144)] /* unique */ /* range: 0,262144 */ int* p8, [in, unique, string, range(0, 257)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 257) */ wchar_t* p9);
    int Proc43([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in] int p1, [in] int p2, [in, range(0, 16)] /* range: 0,16 */ int p3, [in, unique, size_is(p3)] byte p4[]);
    int Proc44([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in, string, range(0, 257)] /* FC_SUPPLEMENT FC_C_CSTRING Range(0, 257) */ char* p1, [in, unique, string, range(0, 257)] /* unique */ /* FC_SUPPLEMENT FC_C_CSTRING Range(0, 257) */ char* p2, [in] int p3, [in] int p4, [in] int p5, [in] int p6, [in, string, range(0, 32768)] /* FC_SUPPLEMENT FC_C_CSTRING Range(0, 32768) */ char* p7, [in, unique, string, range(0, 257)] /* unique */ /* FC_SUPPLEMENT FC_C_CSTRING Range(0, 257) */ char* p8, [in, out, unique] /* unique */ int* p9, [in, unique, size_is(p11)] byte p10[], [range(0, 4096), in] /* range: 0,4096 */ int p11, [in, unique, string, range(0, 2048)] /* unique */ /* FC_SUPPLEMENT FC_C_CSTRING Range(0, 2048) */ char* p12, [in, unique, size_is(p14)] byte p13[], [range(0, 514), in] /* range: 0,514 */ int p14, [out, context_handle] _STRICT_CONTEXT_HANDLE_0* p15);
    int Proc45([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in, string, range(0, 257)] /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 257) */ wchar_t* p1, [in, unique, string, range(0, 257)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 257) */ wchar_t* p2, [in] int p3, [in] int p4, [in] int p5, [in] int p6, [in, string, range(0, 32768)] /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 32768) */ wchar_t* p7, [in, unique, string, range(0, 257)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 257) */ wchar_t* p8, [in, out, unique] /* unique */ int* p9, [in, unique, size_is(p11)] byte p10[], [range(0, 4096), in] /* range: 0,4096 */ int p11, [in, unique, string, range(0, 2048)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 2048) */ wchar_t* p12, [in, unique, size_is(p14)] byte p13[], [range(0, 514), in] /* range: 0,514 */ int p14, [out, context_handle] _STRICT_CONTEXT_HANDLE_0* p15);
    int Proc46([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in] int p1, [in, switch_is(p1)] _Union_24* p2, [out, switch_is(p1)] _Union_27* p3);
    int Proc47([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in] _Struct_32* p1, [in] GUID* p2, [out] GUID* p3, [out] int* p4, [out, context_handle] _STRICT_CONTEXT_HANDLE_0* p5);
    unsigned int Proc48([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [out] /* unique */ _Struct_37** p1);
    int Proc49([in, out, context_handle] _STRICT_CONTEXT_HANDLE_0* p0, [out] int* p1);
    int Proc50([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in] int p1, [in] int p2, [in, switch_is(p2)] _Union_38* p3, [out, switch_is(p2)] _Union_40* p4);
    int Proc51([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in] int p1, [in] int p2, [in, switch_is(p2)] _Union_42* p3, [out, switch_is(p2)] _Union_44* p4);
    int Proc52([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in] __int64 p1, [in] int p2, [in] int p3, [in, range(0, 4096)] /* range: 0,4096 */ int p4, [in, unique, size_is(p4)] byte p5[], [out] int* p6);
    int Proc53([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in, string, range(0, 257)] /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 257) */ wchar_t* p1, [out] __int64* p2);
    int Proc54([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in, string, range(0, 257)] /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 257) */ wchar_t* p1, [in] __int64 p2, [out, context_handle] _STRICT_CONTEXT_HANDLE_0* p3);
    int Proc55([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in] int p1, [out, switch_is(p1)] _Union_45* p2);
    int Proc56([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in] int p1, [out] _Struct_20* p2);
    int Proc57([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in, string, range(0, 257)] /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 257) */ wchar_t* p1, [in] int p2);
    int Proc58([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in] int p1);
    int Proc59([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in, string] wchar_t* p1, [in, string] wchar_t* p2, [in] int p3, [out, string] /* unique */ wchar_t** p4);
    int Proc60([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in, string, range(0, 257)] /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 257) */ wchar_t* p1, [in, unique, string, range(0, 257)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 257) */ wchar_t* p2, [in] int p3, [in] int p4, [in] int p5, [in] int p6, [in, string, range(0, 32768)] /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 32768) */ wchar_t* p7, [in, unique, string, range(0, 257)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 257) */ wchar_t* p8, [in, out, unique] /* unique */ int* p9, [in, unique, size_is(p11)] byte p10[], [range(0, 4096), in] /* range: 0,4096 */ int p11, [in, unique, string, range(0, 2048)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 2048) */ wchar_t* p12, [in, unique, size_is(p14)] byte p13[], [range(0, 514), in] /* range: 0,514 */ int p14, [in] short p15, [out, context_handle] _STRICT_CONTEXT_HANDLE_0* p16);
    int Proc61([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in] int p1, [in] int p2, [out, system_handle(sh_reg_key)] /* FC_SYSTEM_HANDLE RegKey */ HANDLE* p3);
    int Proc62([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in] int p1, [in, out, unique, size_is(p3)] wchar_t p2[], [in] int p3, [out] int* p4);
    int Proc63([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in, context_handle] _STRICT_CONTEXT_HANDLE_0 p1, [out, system_handle(sh_token)] /* FC_SYSTEM_HANDLE Token */ HANDLE* p2);
    int Proc64([in] handle_t _hProcHandle, [in, unique, string, range(0, 257)] /* unique */ /* FC_SUPPLEMENT FC_C_WSTRING Range(0, 257) */ wchar_t* p0, [in] int p1, [out, context_handle] _STRICT_CONTEXT_HANDLE_0* p2);
    int Proc65([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in] int p1, [in] int p2, [out, system_handle(sh_reg_key)] /* FC_SYSTEM_HANDLE RegKey */ HANDLE* p3);
    int Proc66([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in] int p1, [in, out, unique, size_is(p3)] wchar_t p2[], [in] int p3, [out] int* p4);
    int Proc67([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in, string] wchar_t* p1, [in, string] wchar_t* p2);
    int Proc68([in, context_handle] _STRICT_CONTEXT_HANDLE_0 p0, [in] __int64 p1, [in] int p2, [in, range(0, 4096)] /* range: 0,4096 */ int p3, [in, unique, size_is(p3)] byte p4[], [out] int* p5);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment