ReactOS 0.4.15-dev-7924-g5949c20
printproviders.c File Reference
#include "precomp.h"
Include dependency graph for printproviders.c:

Go to the source code of this file.

Functions

BOOL WINAPI AddPrintProvidorA (PSTR pName, DWORD Level, PBYTE pProviderInfo)
 
BOOL WINAPI AddPrintProvidorW (PWSTR pName, DWORD Level, PBYTE pProviderInfo)
 
BOOL WINAPI DeletePrintProvidorA (PSTR pName, PSTR pEnvironment, PSTR pPrintProviderName)
 
BOOL WINAPI DeletePrintProvidorW (PWSTR pName, PWSTR pEnvironment, PWSTR pPrintProviderName)
 

Function Documentation

◆ AddPrintProvidorA()

BOOL WINAPI AddPrintProvidorA ( PSTR  pName,
DWORD  Level,
PBYTE  pProviderInfo 
)

Definition at line 11 of file printproviders.c.

12{
16 DWORD len;
17 BOOL res;
18 PBYTE pPI = NULL;
19
20 TRACE("AddPrintProvidorA(%s, %lu, %p)\n", pName, Level, pProviderInfo);
21
22 ZeroMemory(&pi1W, sizeof(PROVIDOR_INFO_1W));
23 pi2W.pOrder = NULL;
24
25 switch (Level)
26 {
27 case 1:
28 {
29 PROVIDOR_INFO_1A *pi1A = (PROVIDOR_INFO_1A*)pProviderInfo;
30 if (pi1A->pName)
31 {
32 len = MultiByteToWideChar(CP_ACP, 0, pi1A->pName, -1, NULL, 0);
33 pi1W.pName = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
34 MultiByteToWideChar(CP_ACP, 0, pi1A->pName, -1, pi1W.pName, len);
35 }
36 if (pi1A->pEnvironment)
37 {
38 len = MultiByteToWideChar(CP_ACP, 0, pi1A->pEnvironment, -1, NULL, 0);
39 pi1W.pEnvironment = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
41 }
42 if (pi1A->pDLLName)
43 {
44 len = MultiByteToWideChar(CP_ACP, 0, pi1A->pDLLName, -1, NULL, 0);
45 pi1W.pDLLName = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
46 MultiByteToWideChar(CP_ACP, 0, pi1A->pDLLName, -1, pi1W.pDLLName, len);
47 }
48 pPI = (PBYTE)&pi1W;
49 }
50 break;
51
52 case 2:
53 {
54 PROVIDOR_INFO_2A *pi2A = (PROVIDOR_INFO_2A*)pProviderInfo;
55 if (pi2A->pOrder)
56 {
57 len = MultiByteToWideChar(CP_ACP, 0, pi2A->pOrder, -1, NULL, 0);
58 pi2W.pOrder = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
59 MultiByteToWideChar(CP_ACP, 0, pi2A->pOrder, -1, pi2W.pOrder, len);
60 }
61 pPI = (PBYTE)&pi2W;
62 }
63 break;
64
65 default:
67 return FALSE;
68 }
69
70 if (pName)
71 {
73 nameW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
75 }
76
78
80 if (pi1W.pName) HeapFree(GetProcessHeap(), 0, pi1W.pName);
82 if (pi1W.pDLLName) HeapFree(GetProcessHeap(), 0, pi1W.pDLLName);
83 if (pi2W.pOrder) HeapFree(GetProcessHeap(), 0, pi2W.pOrder);
84
85 return res;
86}
static const WCHAR nameW[]
Definition: main.c:46
#define NULL
Definition: types.h:112
#define FALSE
Definition: types.h:117
#define GetProcessHeap()
Definition: compat.h:736
#define CP_ACP
Definition: compat.h:109
#define SetLastError(x)
Definition: compat.h:752
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
#define MultiByteToWideChar
Definition: compat.h:110
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint res
Definition: glext.h:9613
GLenum GLsizei len
Definition: glext.h:6722
static LPSTR pName
Definition: security.c:75
BYTE * PBYTE
Definition: pedump.c:66
#define TRACE(s)
Definition: solgame.cpp:4
LPWSTR pEnvironment
Definition: winspool.h:1311
#define ZeroMemory
Definition: winbase.h:1712
#define ERROR_INVALID_LEVEL
Definition: winerror.h:196
WINBOOL WINAPI AddPrintProvidorW(LPWSTR pName, DWORD level, LPBYTE pProvidorInfo)
_IRQL_requires_same_ typedef _In_ ULONG _In_ UCHAR Level
Definition: wmitypes.h:56
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184

◆ AddPrintProvidorW()

BOOL WINAPI AddPrintProvidorW ( PWSTR  pName,
DWORD  Level,
PBYTE  pProviderInfo 
)

Definition at line 89 of file printproviders.c.

90{
91 DWORD dwErrorCode;
92 WINSPOOL_PROVIDOR_CONTAINER ProvidorContainer;
93
94 TRACE("AddPrintProvidorW(%S, %lu, %p)\n", pName, Level, pProviderInfo);
95
96 if ((Level < 1) || (Level > 2))
97 {
99 return FALSE;
100 }
101
102 ProvidorContainer.ProvidorInfo.pProvidorInfo1 = (WINSPOOL_PROVIDOR_INFO_1*)pProviderInfo;
103 ProvidorContainer.Level = Level;
104
106 {
107 dwErrorCode = _RpcAddPrintProvidor( pName, &ProvidorContainer );
108 }
110 {
111 dwErrorCode = RpcExceptionCode();
112 ERR("_RpcEnumPorts failed with exception code %lu!\n", dwErrorCode);
113 }
115
116 SetLastError(dwErrorCode);
117 return (dwErrorCode == ERROR_SUCCESS);
118}
#define ERR(fmt,...)
Definition: debug.h:110
#define ERROR_SUCCESS
Definition: deptool.c:10
#define EXCEPTION_EXECUTE_HANDLER
Definition: excpt.h:85
#define RpcEndExcept
Definition: rpc.h:128
#define RpcTryExcept
Definition: rpc.h:126
#define RpcExcept(expr)
Definition: rpc.h:127
#define RpcExceptionCode()
Definition: rpc.h:132
DWORD _RpcAddPrintProvidor(WINSPOOL_HANDLE pName, WINSPOOL_PROVIDOR_CONTAINER *pProvidorContainer)
WINSPOOL_PROVIDOR_INFO_1 * pProvidorInfo1
Definition: winspool.idl:727
union _WINSPOOL_PROVIDOR_CONTAINER::@3447 ProvidorInfo

◆ DeletePrintProvidorA()

BOOL WINAPI DeletePrintProvidorA ( PSTR  pName,
PSTR  pEnvironment,
PSTR  pPrintProviderName 
)

Definition at line 121 of file printproviders.c.

122{
123 UNICODE_STRING NameW, EnvW, ProviderW;
124 BOOL Ret;
125
126 TRACE("DeletePrintProvidorW(%s, %s, %s)\n", pName, pEnvironment, pPrintProviderName);
127
128 AsciiToUnicode(&NameW, pName);
129 AsciiToUnicode(&EnvW, pEnvironment);
130 AsciiToUnicode(&ProviderW, pPrintProviderName);
131
132 Ret = DeletePrintProvidorW(NameW.Buffer, EnvW.Buffer, ProviderW.Buffer);
133
134 RtlFreeUnicodeString(&ProviderW);
136 RtlFreeUnicodeString(&NameW);
137
138 return Ret;
139}
wstring AsciiToUnicode(const char *AsciiString)
Definition: tools.cpp:220
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
WINBOOL WINAPI DeletePrintProvidorW(LPWSTR pName, LPWSTR pEnvironment, LPWSTR pPrintProvidorName)

◆ DeletePrintProvidorW()

BOOL WINAPI DeletePrintProvidorW ( PWSTR  pName,
PWSTR  pEnvironment,
PWSTR  pPrintProviderName 
)

Definition at line 142 of file printproviders.c.

143{
144 DWORD dwErrorCode;
145
146 TRACE("DeletePrintProvidorW(%S, %S, %S)\n", pName, pEnvironment, pPrintProviderName);
147
149 {
150 dwErrorCode = _RpcDeletePrintProvidor( pName, pEnvironment, pPrintProviderName );
151 }
153 {
154 dwErrorCode = RpcExceptionCode();
155 ERR("_RpcEnumPorts failed with exception code %lu!\n", dwErrorCode);
156 }
158
159 SetLastError(dwErrorCode);
160 return (dwErrorCode == ERROR_SUCCESS);
161}
DWORD _RpcDeletePrintProvidor(WINSPOOL_HANDLE pName, WCHAR *pEnvironment, WCHAR *pPrintProviderName)