1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
|
/*++
Copyright (c) 1990 Microsoft Corporation
Module Name:
rpcbind.c
Abstract:
Contains the RPC bind and un-bind routines for the Eventlog
client-side APIs.
Author:
Rajen Shah (rajens) 30-Jul-1991
Revision History:
30-Jul-1991 RajenS
created
--*/
//
// INCLUDES
//
#include <elfclntp.h>
#include <lmsvc.h>
#define SERVICE_EVENTLOG L"EVENTLOG"
/****************************************************************************/
handle_t
EVENTLOG_HANDLE_W_bind (
EVENTLOG_HANDLE_W ServerName)
/*++
Routine Description:
This routine calls a common bind routine that is shared by all services.
This routine is called from the ElfOpenEventLog API client stub when
it is necessary to bind to a server.
The binding is done to allow impersonation by the server since that is
necessary for the API calls.
Arguments:
ServerName - A pointer to a string containing the name of the server
to bind with.
Return Value:
The binding handle is returned to the stub routine. If the
binding is unsuccessful, a NULL will be returned.
--*/
{
handle_t bindingHandle;
RPC_STATUS status;
status = RpcpBindRpc (
ServerName,
SERVICE_EVENTLOG,
NULL,
&bindingHandle);
// DbgPrint("EVENTLOG_bind: handle=%d\n",bindingHandle);
return( bindingHandle);
}
/****************************************************************************/
void
EVENTLOG_HANDLE_W_unbind (
EVENTLOG_HANDLE_W ServerName,
handle_t BindingHandle)
/*++
Routine Description:
This routine calls a common unbind routine that is shared by
all services.
Arguments:
ServerName - This is the name of the server from which to unbind.
BindingHandle - This is the binding handle that is to be closed.
Return Value:
none.
--*/
{
RPC_STATUS status;
// DbgPrint("EVENTLOG_HANDLE_unbind: handle=%d\n",BindingHandle);
status = RpcpUnbindRpc ( BindingHandle);
return;
UNREFERENCED_PARAMETER(ServerName);
}
handle_t
EVENTLOG_HANDLE_A_bind (
EVENTLOG_HANDLE_A ServerName)
/*++
Routine Description:
This routine calls EVENTLOG_HANDLE_W_bind to do the work.
Arguments:
ServerName - A pointer to a UNICODE string containing the name of
the server to bind with.
Return Value:
The binding handle is returned to the stub routine. If the
binding is unsuccessful, a NULL will be returned.
--*/
{
UNICODE_STRING ServerNameU;
ANSI_STRING ServerNameA;
handle_t bindingHandle;
//
// Convert the ANSI string to a UNICODE string before calling the
// UNICODE routine.
//
RtlInitAnsiString (&ServerNameA, (PSTR)ServerName);
RtlAnsiStringToUnicodeString (
&ServerNameU,
&ServerNameA,
TRUE
);
bindingHandle = EVENTLOG_HANDLE_W_bind(
(EVENTLOG_HANDLE_W)ServerNameU.Buffer
);
RtlFreeUnicodeString (&ServerNameU);
return( bindingHandle);
}
/****************************************************************************/
void
EVENTLOG_HANDLE_A_unbind (
EVENTLOG_HANDLE_A ServerName,
handle_t BindingHandle)
/*++
Routine Description:
This routine calls EVENTLOG_HANDLE_W_unbind.
Arguments:
ServerName - This is the ANSI name of the server from which to unbind.
BindingHandle - This is the binding handle that is to be closed.
Return Value:
none.
--*/
{
UNICODE_STRING ServerNameU;
ANSI_STRING ServerNameA;
//
// Convert the ANSI string to a UNICODE string before calling the
// UNICODE routine.
//
RtlInitAnsiString (&ServerNameA, (PSTR)ServerName);
RtlAnsiStringToUnicodeString (
&ServerNameU,
&ServerNameA,
TRUE
);
EVENTLOG_HANDLE_W_unbind( (EVENTLOG_HANDLE_W)ServerNameU.Buffer,
BindingHandle );
RtlFreeUnicodeString (&ServerNameU);
return;
}
|