mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2026-01-12 16:31:31 +01:00
714 lines
22 KiB
ObjectPascal
714 lines
22 KiB
ObjectPascal
{******************************************************************************}
|
|
{ }
|
|
{ Asynchronous RPC API interface Unit for Object Pascal }
|
|
{ }
|
|
{ Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
|
|
{ Corporation. All Rights Reserved. }
|
|
{ }
|
|
{ The original file is: rpcnasync.h, released August 2001. The original Pascal }
|
|
{ code is: RpcAsync.pas, released December 2000. The initial developer of the }
|
|
{ Pascal code is Marcel van Brakel (brakelm att chello dott nl). }
|
|
{ }
|
|
{ Portions created by Marcel van Brakel are Copyright (C) 1999-2001 }
|
|
{ Marcel van Brakel. All Rights Reserved. }
|
|
{ }
|
|
{ Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
|
|
{ }
|
|
{ You may retrieve the latest version of this file at the Project JEDI }
|
|
{ APILIB home page, located at http://jedi-apilib.sourceforge.net }
|
|
{ }
|
|
{ The contents of this file are used with permission, subject to the Mozilla }
|
|
{ Public License Version 1.1 (the "License"); you may not use this file except }
|
|
{ in compliance with the License. You may obtain a copy of the License at }
|
|
{ http://www.mozilla.org/MPL/MPL-1.1.html }
|
|
{ }
|
|
{ Software distributed under the License is distributed on an "AS IS" basis, }
|
|
{ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
|
|
{ the specific language governing rights and limitations under the License. }
|
|
{ }
|
|
{ Alternatively, the contents of this file may be used under the terms of the }
|
|
{ GNU Lesser General Public License (the "LGPL License"), in which case the }
|
|
{ provisions of the LGPL License are applicable instead of those above. }
|
|
{ If you wish to allow use of your version of this file only under the terms }
|
|
{ of the LGPL License and not to allow others to use your version of this file }
|
|
{ under the MPL, indicate your decision by deleting the provisions above and }
|
|
{ replace them with the notice and other provisions required by the LGPL }
|
|
{ License. If you do not delete the provisions above, a recipient may use }
|
|
{ your version of this file under either the MPL or the LGPL License. }
|
|
{ }
|
|
{ For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
|
|
{ }
|
|
{******************************************************************************}
|
|
|
|
|
|
unit JwaRpcASync;
|
|
|
|
{$WEAKPACKAGEUNIT}
|
|
|
|
{$HPPEMIT ''}
|
|
{$HPPEMIT '#include "RpcAsync.h"'}
|
|
{$HPPEMIT ''}
|
|
{$HPPEMIT 'typedef RPC_EXTENDED_ERROR_INFO* PRPC_EXTENDED_ERROR_INFO'}
|
|
{$HPPEMIT 'typedef RPC_ERROR_ENUM_HANDLE* PRPC_ERROR_ENUM_HANDLE'}
|
|
{$HPPEMIT ''}
|
|
|
|
{$I jediapilib.inc}
|
|
|
|
interface
|
|
|
|
uses
|
|
JwaRpc, JwaRpcDce, JwaWinBase, JwaWinNT, JwaWinType;
|
|
|
|
type
|
|
_RPC_NOTIFICATION_TYPES = (
|
|
RpcNotificationTypeNone,
|
|
RpcNotificationTypeEvent,
|
|
RpcNotificationTypeApc,
|
|
RpcNotificationTypeIoc,
|
|
RpcNotificationTypeHwnd,
|
|
RpcNotificationTypeCallback);
|
|
{$EXTERNALSYM _RPC_NOTIFICATION_TYPES}
|
|
RPC_NOTIFICATION_TYPES = _RPC_NOTIFICATION_TYPES;
|
|
{$EXTERNALSYM RPC_NOTIFICATION_TYPES}
|
|
TRpcNotificationTypes = RPC_NOTIFICATION_TYPES;
|
|
|
|
PFN_RPCNOTIFICATION_ROUTINE = ^RPCNOTIFICATION_ROUTINE;
|
|
{$EXTERNALSYM PFN_RPCNOTIFICATION_ROUTINE}
|
|
|
|
_RPC_ASYNC_EVENT = (
|
|
RpcCallComplete,
|
|
RpcSendComplete,
|
|
RpcReceiveComplete);
|
|
{$EXTERNALSYM _RPC_ASYNC_EVENT}
|
|
RPC_ASYNC_EVENT = _RPC_ASYNC_EVENT;
|
|
{$EXTERNALSYM RPC_ASYNC_EVENT}
|
|
TRpcASynchEvent = RPC_ASYNC_EVENT;
|
|
|
|
_RPC_ASYNC_STATE = record
|
|
Size: Cardinal; // size of this structure
|
|
Signature: Cardinal;
|
|
Lock: Longint;
|
|
Flags: Cardinal;
|
|
StubInfo: Pointer;
|
|
UserInfo: Pointer;
|
|
RuntimeInfo: Pointer;
|
|
Event: RPC_ASYNC_EVENT;
|
|
|
|
NotificationType: RPC_NOTIFICATION_TYPES;
|
|
u: record
|
|
case Integer of
|
|
//
|
|
// Notification by APC
|
|
//
|
|
0: (
|
|
NotificationRoutine: PFN_RPCNOTIFICATION_ROUTINE;
|
|
hThread: HANDLE);
|
|
|
|
//
|
|
// Notification by IO completion port
|
|
//
|
|
1: (
|
|
hIOPort: HANDLE;
|
|
dwNumberOfBytesTransferred: DWORD;
|
|
dwCompletionKey: DWORD_PTR;
|
|
lpOverlapped: LPOVERLAPPED);
|
|
|
|
//
|
|
// Notification by window message
|
|
//
|
|
2: (
|
|
hWnd: HWND;
|
|
Msg: UINT);
|
|
|
|
//
|
|
// Notification by event
|
|
//
|
|
4: (
|
|
hEvent: HANDLE);
|
|
|
|
//
|
|
// Notification by callback function
|
|
//
|
|
// This option is available only to OLE
|
|
//
|
|
//5: (
|
|
// NotificationRoutine: PFN_RPCNOTIFICATION_ROUTINE);
|
|
end;
|
|
Reserved: array [0..3] of LONG_PTR;
|
|
end;
|
|
{$EXTERNALSYM _RPC_ASYNC_STATE}
|
|
RPC_ASYNC_STATE = _RPC_ASYNC_STATE;
|
|
{$EXTERNALSYM RPC_ASYNC_STATE}
|
|
PRPC_ASYNC_STATE = ^RPC_ASYNC_STATE;
|
|
{$EXTERNALSYM PRPC_ASYNC_STATE}
|
|
TRpcASynchState = RPC_ASYNC_STATE;
|
|
PRpcASynchState = PRPC_ASYNC_STATE;
|
|
|
|
RPCNOTIFICATION_ROUTINE = procedure(var pAsync: RPC_ASYNC_STATE;
|
|
Context: Pointer; Event: RPC_ASYNC_EVENT); stdcall;
|
|
{$EXTERNALSYM RPCNOTIFICATION_ROUTINE}
|
|
// PFN_RPCNOTIFICATION_ROUTINE = ^RPCNOTIFICATION_ROUTINE;
|
|
// {$EXTERNALSYM PFN_RPCNOTIFICATION_ROUTINE}
|
|
TRpcNotificationRoutine = RPCNOTIFICATION_ROUTINE;
|
|
PRpcNotificationRoutine = PFN_RPCNOTIFICATION_ROUTINE;
|
|
|
|
// Possible values for Flags
|
|
|
|
const
|
|
RPC_C_NOTIFY_ON_SEND_COMPLETE = $1;
|
|
{$EXTERNALSYM RPC_C_NOTIFY_ON_SEND_COMPLETE}
|
|
RPC_C_INFINITE_TIMEOUT = INFINITE;
|
|
{$EXTERNALSYM RPC_C_INFINITE_TIMEOUT}
|
|
|
|
function RpcAsyncGetCallHandle(var pAsync: RPC_ASYNC_STATE): Pointer;
|
|
{$EXTERNALSYM RpcAsyncGetCallHandle}
|
|
function RpcAsyncInitializeHandle(var pAsync: RPC_ASYNC_STATE; Size: Cardinal): RPC_STATUS; stdcall;
|
|
{$EXTERNALSYM RpcAsyncInitializeHandle}
|
|
function RpcAsyncRegisterInfo(var pAsync: RPC_ASYNC_STATE): RPC_STATUS; stdcall;
|
|
{$EXTERNALSYM RpcAsyncRegisterInfo}
|
|
function RpcAsyncGetCallStatus(var pAsync: RPC_ASYNC_STATE): RPC_STATUS; stdcall;
|
|
{$EXTERNALSYM RpcAsyncGetCallStatus}
|
|
function RpcAsyncCompleteCall(var pAsync: RPC_ASYNC_STATE; Reply: Pointer): RPC_STATUS; stdcall;
|
|
{$EXTERNALSYM RpcAsyncCompleteCall}
|
|
function RpcAsyncAbortCall(var pAsync: RPC_ASYNC_STATE; ExceptionCode: Cardinal): RPC_STATUS; stdcall;
|
|
{$EXTERNALSYM RpcAsyncAbortCall}
|
|
function RpcAsyncCancelCall(var pAsync: RPC_ASYNC_STATE; fAbort: BOOL): RPC_STATUS; stdcall;
|
|
{$EXTERNALSYM RpcAsyncCancelCall}
|
|
function RpcAsyncCleanupThread(dwTimeout: DWORD): RPC_STATUS; stdcall;
|
|
{$EXTERNALSYM RpcAsyncCleanupThread}
|
|
|
|
type
|
|
tagExtendedErrorParamTypes = (
|
|
eeptFiller0,
|
|
eeptAnsiString,
|
|
eeptUnicodeString,
|
|
eeptLongVal,
|
|
eeptShortVal,
|
|
eeptPointerVal,
|
|
eeptNone,
|
|
eeptBinary);
|
|
{$EXTERNALSYM tagExtendedErrorParamTypes}
|
|
ExtendedErrorParamTypes = tagExtendedErrorParamTypes;
|
|
{$EXTERNALSYM ExtendedErrorParamTypes}
|
|
TExtendedErrorParamTypes = ExtendedErrorParamTypes;
|
|
|
|
const
|
|
MaxNumberOfEEInfoParams = 4;
|
|
{$EXTERNALSYM MaxNumberOfEEInfoParams}
|
|
RPC_EEINFO_VERSION = 1;
|
|
{$EXTERNALSYM RPC_EEINFO_VERSION}
|
|
|
|
type
|
|
tagBinaryParam = record
|
|
Buffer: Pointer;
|
|
Size: Word;
|
|
end;
|
|
{$EXTERNALSYM tagBinaryParam}
|
|
BinaryParam = tagBinaryParam;
|
|
{$EXTERNALSYM BinaryParam}
|
|
TBinaryParam = BinaryParam;
|
|
|
|
tagRPC_EE_INFO_PARAM = record
|
|
ParameterType: ExtendedErrorParamTypes;
|
|
case Integer of
|
|
0: (AnsiString: LPSTR);
|
|
1: (UnicodeString: LPWSTR);
|
|
2: (LVal: Longint);
|
|
3: (SVal: Word);
|
|
4: (PVal: ULONGLONG);
|
|
5: (BVal: BinaryParam);
|
|
end;
|
|
{$EXTERNALSYM tagRPC_EE_INFO_PARAM}
|
|
RPC_EE_INFO_PARAM = tagRPC_EE_INFO_PARAM;
|
|
{$EXTERNALSYM RPC_EE_INFO_PARAM}
|
|
TRpcEeInfoParam = RPC_EE_INFO_PARAM;
|
|
|
|
const
|
|
EEInfoPreviousRecordsMissing = 1;
|
|
{$EXTERNALSYM EEInfoPreviousRecordsMissing}
|
|
EEInfoNextRecordsMissing = 2;
|
|
{$EXTERNALSYM EEInfoNextRecordsMissing}
|
|
EEInfoUseFileTime = 4;
|
|
{$EXTERNALSYM EEInfoUseFileTime}
|
|
|
|
EEInfoGCCOM = 11;
|
|
{$EXTERNALSYM EEInfoGCCOM}
|
|
EEInfoGCFRS = 12;
|
|
{$EXTERNALSYM EEInfoGCFRS}
|
|
|
|
type
|
|
tagRPC_EXTENDED_ERROR_INFO = record
|
|
Version: ULONG;
|
|
ComputerName: LPWSTR;
|
|
ProcessID: ULONG;
|
|
u: record
|
|
case Integer of
|
|
0: ( SystemTime: SYSTEMTIME);
|
|
1: (FileTime: FILETIME);
|
|
end;
|
|
GeneratingComponent: ULONG;
|
|
Status: ULONG;
|
|
DetectionLocation: USHORT;
|
|
Flags: USHORT;
|
|
NumberOfParameters: Integer;
|
|
Parameters: array [0..MaxNumberOfEEInfoParams - 1] of RPC_EE_INFO_PARAM;
|
|
end;
|
|
{$EXTERNALSYM tagRPC_EXTENDED_ERROR_INFO}
|
|
RPC_EXTENDED_ERROR_INFO = tagRPC_EXTENDED_ERROR_INFO;
|
|
{$EXTERNALSYM RPC_EXTENDED_ERROR_INFO}
|
|
PRPC_EXTENDED_ERROR_INFO = ^RPC_EXTENDED_ERROR_INFO;
|
|
{$NODEFINE PRPC_EXTENDED_ERROR_INFO}
|
|
TRpcExtendedErrorInfo = RPC_EXTENDED_ERROR_INFO;
|
|
PRpcExtendedErrorInfo = ^RPC_EXTENDED_ERROR_INFO;
|
|
|
|
tagRPC_ERROR_ENUM_HANDLE = record
|
|
Signature: ULONG;
|
|
CurrentPos: Pointer;
|
|
Head: Pointer;
|
|
end;
|
|
{$EXTERNALSYM tagRPC_ERROR_ENUM_HANDLE}
|
|
RPC_ERROR_ENUM_HANDLE = tagRPC_ERROR_ENUM_HANDLE;
|
|
{$EXTERNALSYM RPC_ERROR_ENUM_HANDLE}
|
|
PRPC_ERROR_ENUM_HANDLE = ^RPC_ERROR_ENUM_HANDLE;
|
|
{$NODEFINE PRPC_ERROR_ENUM_HANDLE}
|
|
TRpcErrorEnumHandle = RPC_ERROR_ENUM_HANDLE;
|
|
PRpcErrorEnumHandle = PRPC_ERROR_ENUM_HANDLE;
|
|
|
|
function RpcErrorStartEnumeration(var EnumHandle: RPC_ERROR_ENUM_HANDLE): RPC_STATUS; stdcall;
|
|
{$EXTERNALSYM RpcErrorStartEnumeration}
|
|
function RpcErrorGetNextRecord(EnumHandle: PRPC_ERROR_ENUM_HANDLE; CopyStrings: BOOL;
|
|
var ErrorInfo: RPC_EXTENDED_ERROR_INFO): RPC_STATUS; stdcall;
|
|
{$EXTERNALSYM RpcErrorGetNextRecord}
|
|
function RpcErrorEndEnumeration(var EnumHandle: RPC_ERROR_ENUM_HANDLE): RPC_STATUS; stdcall;
|
|
{$EXTERNALSYM RpcErrorEndEnumeration}
|
|
function RpcErrorResetEnumeration(var EnumHandle: RPC_ERROR_ENUM_HANDLE): RPC_STATUS; stdcall;
|
|
{$EXTERNALSYM RpcErrorResetEnumeration}
|
|
function RpcErrorGetNumberOfRecords(var EnumHandle: RPC_ERROR_ENUM_HANDLE; var Records: Integer): RPC_STATUS; stdcall;
|
|
{$EXTERNALSYM RpcErrorGetNumberOfRecords}
|
|
function RpcErrorSaveErrorInfo(EnumHandle: PRPC_ERROR_ENUM_HANDLE; var ErrorBlob: PVOID; var BlobSize: size_t): RPC_STATUS; stdcall;
|
|
{$EXTERNALSYM RpcErrorSaveErrorInfo}
|
|
function RpcErrorLoadErrorInfo(ErrorBlob: PVOID; BlobSize: size_t; var EnumHandle: RPC_ERROR_ENUM_HANDLE): RPC_STATUS; stdcall;
|
|
{$EXTERNALSYM RpcErrorLoadErrorInfo}
|
|
function RpcErrorAddRecord(ErrorInfo: PRPC_EXTENDED_ERROR_INFO): RPC_STATUS; stdcall;
|
|
{$EXTERNALSYM RpcErrorAddRecord}
|
|
procedure RpcErrorClearInformation; stdcall;
|
|
{$EXTERNALSYM RpcErrorClearInformation}
|
|
function RpcGetAuthorizationContextForClient(ClientBinding: RPC_BINDING_HANDLE; ImpersonateOnReturn: BOOL;
|
|
Reserved1: PVOID; pExpirationTime: PLARGE_INTEGER; Reserved2: LUID; Reserved3: DWORD;
|
|
Reserved4: PVOID; var pAuthzClientContext: PVOID): RPC_STATUS; stdcall;
|
|
{$EXTERNALSYM RpcGetAuthorizationContextForClient}
|
|
function RpcFreeAuthorizationContext(var pAuthzClientContext: PVOID): RPC_STATUS; stdcall;
|
|
{$EXTERNALSYM RpcFreeAuthorizationContext}
|
|
function RpcSsContextLockExclusive(ServerBindingHandle: RPC_BINDING_HANDLE; UserContext: PVOID): RPC_STATUS; stdcall;
|
|
{$EXTERNALSYM RpcSsContextLockExclusive}
|
|
function RpcSsContextLockShared(ServerBindingHandle: RPC_BINDING_HANDLE; UserContext: PVOID): RPC_STATUS; stdcall;
|
|
{$EXTERNALSYM RpcSsContextLockShared}
|
|
|
|
const
|
|
RPC_CALL_ATTRIBUTES_VERSION = 1;
|
|
{$EXTERNALSYM RPC_CALL_ATTRIBUTES_VERSION}
|
|
RPC_QUERY_SERVER_PRINCIPAL_NAME = 2;
|
|
{$EXTERNALSYM RPC_QUERY_SERVER_PRINCIPAL_NAME}
|
|
RPC_QUERY_CLIENT_PRINCIPAL_NAME = 4;
|
|
{$EXTERNALSYM RPC_QUERY_CLIENT_PRINCIPAL_NAME}
|
|
|
|
type
|
|
tagRPC_CALL_ATTRIBUTES_V1_W = record
|
|
Version: Cardinal;
|
|
Flags: Cardinal;
|
|
ServerPrincipalNameBufferLength: Cardinal;
|
|
ServerPrincipalName: PWord;
|
|
ClientPrincipalNameBufferLength: Cardinal;
|
|
ClientPrincipalName: PWord;
|
|
AuthenticationLevel: Cardinal;
|
|
AuthenticationService: Cardinal;
|
|
NullSession: BOOL;
|
|
end;
|
|
{$EXTERNALSYM tagRPC_CALL_ATTRIBUTES_V1_W}
|
|
RPC_CALL_ATTRIBUTES_V1_W = tagRPC_CALL_ATTRIBUTES_V1_W;
|
|
{$EXTERNALSYM RPC_CALL_ATTRIBUTES_V1_W}
|
|
TRpcCallAttributesV1W = RPC_CALL_ATTRIBUTES_V1_W;
|
|
|
|
tagRPC_CALL_ATTRIBUTES_V1_A = record
|
|
Version: Cardinal;
|
|
Flags: Cardinal;
|
|
ServerPrincipalNameBufferLength: Cardinal;
|
|
ServerPrincipalName: PChar;
|
|
ClientPrincipalNameBufferLength: Cardinal;
|
|
ClientPrincipalName: PChar;
|
|
AuthenticationLevel: Cardinal;
|
|
AuthenticationService: Cardinal;
|
|
NullSession: BOOL;
|
|
end;
|
|
{$EXTERNALSYM tagRPC_CALL_ATTRIBUTES_V1_A}
|
|
RPC_CALL_ATTRIBUTES_V1_A = tagRPC_CALL_ATTRIBUTES_V1_A;
|
|
{$EXTERNALSYM RPC_CALL_ATTRIBUTES_V1_A}
|
|
TRpcCallAttributesV1A = RPC_CALL_ATTRIBUTES_V1_A;
|
|
{$IFDEF UNICODE}
|
|
RPC_CALL_ATTRIBUTES_V1 = RPC_CALL_ATTRIBUTES_V1_W;
|
|
{$EXTERNALSYM RPC_CALL_ATTRIBUTES_V1}
|
|
TRpcCallAttributesV1 = TRpcCallAttributesV1W;
|
|
{$ELSE}
|
|
RPC_CALL_ATTRIBUTES_V1 = RPC_CALL_ATTRIBUTES_V1_A;
|
|
{$EXTERNALSYM RPC_CALL_ATTRIBUTES_V1}
|
|
TRpcCallAttributesV1 = TRpcCallAttributesV1A;
|
|
{$ENDIF UNICODE}
|
|
|
|
function RpcServerInqCallAttributesW(ClientBinding: RPC_BINDING_HANDLE; RpcCallAttributes: Pointer): RPC_STATUS; stdcall;
|
|
{$EXTERNALSYM RpcServerInqCallAttributesW}
|
|
function RpcServerInqCallAttributesA(ClientBinding: RPC_BINDING_HANDLE; RpcCallAttributes: Pointer): RPC_STATUS; stdcall;
|
|
{$EXTERNALSYM RpcServerInqCallAttributesA}
|
|
function RpcServerInqCallAttributes(ClientBinding: RPC_BINDING_HANDLE; RpcCallAttributes: Pointer): RPC_STATUS; stdcall;
|
|
{$EXTERNALSYM RpcServerInqCallAttributes}
|
|
|
|
type
|
|
RPC_CALL_ATTRIBUTES = RPC_CALL_ATTRIBUTES_V1;
|
|
{$EXTERNALSYM RPC_CALL_ATTRIBUTES}
|
|
TRpcCallAttributes = RPC_CALL_ATTRIBUTES;
|
|
|
|
implementation
|
|
|
|
const
|
|
rpclib = 'rpc4rt.dll';
|
|
{$IFDEF UNICODE}
|
|
AWSuffix = 'W';
|
|
{$ELSE}
|
|
AWSuffix = 'A';
|
|
{$ENDIF UNICODE}
|
|
|
|
function RpcAsyncGetCallHandle(var pAsync: RPC_ASYNC_STATE): Pointer;
|
|
begin
|
|
Result := pAsync.RuntimeInfo;
|
|
end;
|
|
|
|
{$IFDEF DYNAMIC_LINK}
|
|
|
|
var
|
|
_RpcAsyncInitializeHandle: Pointer;
|
|
|
|
function RpcAsyncInitializeHandle;
|
|
begin
|
|
GetProcedureAddress(_RpcAsyncInitializeHandle, rpclib, 'RpcAsyncInitializeHandle');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_RpcAsyncInitializeHandle]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_RpcAsyncRegisterInfo: Pointer;
|
|
|
|
function RpcAsyncRegisterInfo;
|
|
begin
|
|
GetProcedureAddress(_RpcAsyncRegisterInfo, rpclib, 'RpcAsyncRegisterInfo');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_RpcAsyncRegisterInfo]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_RpcAsyncGetCallStatus: Pointer;
|
|
|
|
function RpcAsyncGetCallStatus;
|
|
begin
|
|
GetProcedureAddress(_RpcAsyncGetCallStatus, rpclib, 'RpcAsyncGetCallStatus');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_RpcAsyncGetCallStatus]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_RpcAsyncCompleteCall: Pointer;
|
|
|
|
function RpcAsyncCompleteCall;
|
|
begin
|
|
GetProcedureAddress(_RpcAsyncCompleteCall, rpclib, 'RpcAsyncCompleteCall');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_RpcAsyncCompleteCall]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_RpcAsyncAbortCall: Pointer;
|
|
|
|
function RpcAsyncAbortCall;
|
|
begin
|
|
GetProcedureAddress(_RpcAsyncAbortCall, rpclib, 'RpcAsyncAbortCall');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_RpcAsyncAbortCall]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_RpcAsyncCancelCall: Pointer;
|
|
|
|
function RpcAsyncCancelCall;
|
|
begin
|
|
GetProcedureAddress(_RpcAsyncCancelCall, rpclib, 'RpcAsyncCancelCall');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_RpcAsyncCancelCall]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_RpcAsyncCleanupThread: Pointer;
|
|
|
|
function RpcAsyncCleanupThread;
|
|
begin
|
|
GetProcedureAddress(_RpcAsyncCleanupThread, rpclib, 'RpcAsyncCleanupThread');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_RpcAsyncCleanupThread]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_RpcErrorStartEnumeration: Pointer;
|
|
|
|
function RpcErrorStartEnumeration;
|
|
begin
|
|
GetProcedureAddress(_RpcErrorStartEnumeration, rpclib, 'RpcErrorStartEnumeration');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_RpcErrorStartEnumeration]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_RpcErrorGetNextRecord: Pointer;
|
|
|
|
function RpcErrorGetNextRecord;
|
|
begin
|
|
GetProcedureAddress(_RpcErrorGetNextRecord, rpclib, 'RpcErrorGetNextRecord');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_RpcErrorGetNextRecord]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_RpcErrorEndEnumeration: Pointer;
|
|
|
|
function RpcErrorEndEnumeration;
|
|
begin
|
|
GetProcedureAddress(_RpcErrorEndEnumeration, rpclib, 'RpcErrorEndEnumeration');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_RpcErrorEndEnumeration]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_RpcErrorResetEnumeration: Pointer;
|
|
|
|
function RpcErrorResetEnumeration;
|
|
begin
|
|
GetProcedureAddress(_RpcErrorResetEnumeration, rpclib, 'RpcErrorResetEnumeration');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_RpcErrorResetEnumeration]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_RpcErrorGetNumberOfRecords: Pointer;
|
|
|
|
function RpcErrorGetNumberOfRecords;
|
|
begin
|
|
GetProcedureAddress(_RpcErrorGetNumberOfRecords, rpclib, 'RpcErrorGetNumberOfRecords');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_RpcErrorGetNumberOfRecords]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_RpcErrorSaveErrorInfo: Pointer;
|
|
|
|
function RpcErrorSaveErrorInfo;
|
|
begin
|
|
GetProcedureAddress(_RpcErrorSaveErrorInfo, rpclib, 'RpcErrorSaveErrorInfo');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_RpcErrorSaveErrorInfo]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_RpcErrorLoadErrorInfo: Pointer;
|
|
|
|
function RpcErrorLoadErrorInfo;
|
|
begin
|
|
GetProcedureAddress(_RpcErrorLoadErrorInfo, rpclib, 'RpcErrorLoadErrorInfo');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_RpcErrorLoadErrorInfo]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_RpcErrorAddRecord: Pointer;
|
|
|
|
function RpcErrorAddRecord;
|
|
begin
|
|
GetProcedureAddress(_RpcErrorAddRecord, rpclib, 'RpcErrorAddRecord');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_RpcErrorAddRecord]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_RpcErrorClearInformation: Pointer;
|
|
|
|
procedure RpcErrorClearInformation;
|
|
begin
|
|
GetProcedureAddress(_RpcErrorClearInformation, rpclib, 'RpcErrorClearInformation');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_RpcErrorClearInformation]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_RpcGetAuthContextForClient: Pointer;
|
|
|
|
function RpcGetAuthorizationContextForClient;
|
|
begin
|
|
GetProcedureAddress(_RpcGetAuthContextForClient, rpclib, 'RpcGetAuthorizationContextForClient');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_RpcGetAuthContextForClient]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_RpcFreeAuthorizationContext: Pointer;
|
|
|
|
function RpcFreeAuthorizationContext;
|
|
begin
|
|
GetProcedureAddress(_RpcFreeAuthorizationContext, rpclib, 'RpcFreeAuthorizationContext');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_RpcFreeAuthorizationContext]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_RpcSsContextLockExclusive: Pointer;
|
|
|
|
function RpcSsContextLockExclusive;
|
|
begin
|
|
GetProcedureAddress(_RpcSsContextLockExclusive, rpclib, 'RpcSsContextLockExclusive');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_RpcSsContextLockExclusive]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_RpcSsContextLockShared: Pointer;
|
|
|
|
function RpcSsContextLockShared;
|
|
begin
|
|
GetProcedureAddress(_RpcSsContextLockShared, rpclib, 'RpcSsContextLockShared');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_RpcSsContextLockShared]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_RpcServerInqCallAttributesA: Pointer;
|
|
|
|
function RpcServerInqCallAttributesA;
|
|
begin
|
|
GetProcedureAddress(_RpcServerInqCallAttributesA, rpclib, 'RpcServerInqCallAttributesA');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_RpcServerInqCallAttributesA]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_RpcServerInqCallAttributesW: Pointer;
|
|
|
|
function RpcServerInqCallAttributesW;
|
|
begin
|
|
GetProcedureAddress(_RpcServerInqCallAttributesW, rpclib, 'RpcServerInqCallAttributesW');
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_RpcServerInqCallAttributesW]
|
|
end;
|
|
end;
|
|
|
|
var
|
|
_RpcServerInqCallAttributes: Pointer;
|
|
|
|
function RpcServerInqCallAttributes;
|
|
begin
|
|
GetProcedureAddress(_RpcServerInqCallAttributes, rpclib, 'RpcServerInqCallAttributes' + AWSuffix);
|
|
asm
|
|
MOV ESP, EBP
|
|
POP EBP
|
|
JMP [_RpcServerInqCallAttributes]
|
|
end;
|
|
end;
|
|
|
|
{$ELSE}
|
|
|
|
function RpcAsyncInitializeHandle; external rpclib name 'RpcAsyncInitializeHandle';
|
|
function RpcAsyncRegisterInfo; external rpclib name 'RpcAsyncRegisterInfo';
|
|
function RpcAsyncGetCallStatus; external rpclib name 'RpcAsyncGetCallStatus';
|
|
function RpcAsyncCompleteCall; external rpclib name 'RpcAsyncCompleteCall';
|
|
function RpcAsyncAbortCall; external rpclib name 'RpcAsyncAbortCall';
|
|
function RpcAsyncCancelCall; external rpclib name 'RpcAsyncCancelCall';
|
|
function RpcAsyncCleanupThread; external rpclib name 'RpcAsyncCleanupThread';
|
|
function RpcErrorStartEnumeration; external rpclib name 'RpcErrorStartEnumeration';
|
|
function RpcErrorGetNextRecord; external rpclib name 'RpcErrorGetNextRecord';
|
|
function RpcErrorEndEnumeration; external rpclib name 'RpcErrorEndEnumeration';
|
|
function RpcErrorResetEnumeration; external rpclib name 'RpcErrorResetEnumeration';
|
|
function RpcErrorGetNumberOfRecords; external rpclib name 'RpcErrorGetNumberOfRecords';
|
|
function RpcErrorSaveErrorInfo; external rpclib name 'RpcErrorSaveErrorInfo';
|
|
function RpcErrorLoadErrorInfo; external rpclib name 'RpcErrorLoadErrorInfo';
|
|
function RpcErrorAddRecord; external rpclib name 'RpcErrorAddRecord';
|
|
procedure RpcErrorClearInformation; external rpclib name 'RpcErrorClearInformation';
|
|
function RpcGetAuthorizationContextForClient; external rpclib name 'RpcGetAuthorizationContextForClient';
|
|
function RpcFreeAuthorizationContext; external rpclib name 'RpcFreeAuthorizationContext';
|
|
function RpcSsContextLockExclusive; external rpclib name 'RpcSsContextLockExclusive';
|
|
function RpcSsContextLockShared; external rpclib name 'RpcSsContextLockShared';
|
|
function RpcServerInqCallAttributesA; external rpclib name 'RpcServerInqCallAttributesA';
|
|
function RpcServerInqCallAttributesW; external rpclib name 'RpcServerInqCallAttributesW';
|
|
function RpcServerInqCallAttributes; external rpclib name 'RpcServerInqCallAttributes' + AWSuffix;
|
|
|
|
{$ENDIF DYNAMIC_LINK}
|
|
|
|
end.
|