|
|
/*
* This file is generated by the automatic RPC Parser generator. (Version 0.21) * * Created on 04/09/97 at 00:00:13. */
#include "skeleton.h"
#include "database.h"
#include "funcs.h"
/* Globals used throughout */ DWORD nPropertyLevel = 1; BOOL fIsFlipped = FALSE; BOOL fIgnoreFlatPart = FALSE; BOOL fIgnorePointers = FALSE;
DWORD Conformance = 0; BOOL fConformanceIsSet = FALSE;
/* ======================================================================== *
* Protocol Entry points for Interface resmon * uuid=(e76ea56d-453f-11cf-bfec-08002be23f2f) * ======================================================================== */
VOID WINAPI resmon_Register(HPROTOCOL); VOID WINAPI resmon_Deregister(HPROTOCOL); LPBYTE WINAPI resmon_RecognizeFrame(HFRAME, LPVOID, LPVOID, DWORD, DWORD, HPROTOCOL, DWORD, LPDWORD, LPHPROTOCOL, LPDWORD); LPBYTE WINAPI resmon_AttachProperties(HFRAME, LPVOID, LPVOID, DWORD, DWORD, HPROTOCOL, DWORD, DWORD); DWORD WINAPI resmon_FormatProperties(HFRAME, LPVOID, LPVOID, DWORD, LPPROPERTYINST);
ENTRYPOINTS resmon_EntryPoints = { resmon_Register, resmon_Deregister, resmon_RecognizeFrame, resmon_AttachProperties, resmon_FormatProperties };
HPROTOCOL hresmon = NULL;
/* ======================================================================== *
* Function DLLEntry called at loading and unloading time * ======================================================================== */
DWORD Attached = 0;
BOOL WINAPI DLLEntry(HANDLE hInstance, ULONG Command, LPVOID Reserved) { if ( Command == DLL_PROCESS_ATTACH ) { if ( Attached++ == 0 ) { hresmon = CreateProtocol("R_RESMON", &resmon_EntryPoints, ENTRYPOINTS_SIZE); } }
if ( Command == DLL_PROCESS_DETACH ) { if ( --Attached == 0 ) { DestroyProtocol(hresmon); } } return TRUE; }
/* ======================================================================== *
* Implementation of the entry point functions for each interface * ======================================================================== */
/*
* Interface resmon, protocol RPC_resmon: * uuid=(e76ea56d-453f-11cf-bfec-08002be23f2f) */
VOID WINAPI resmon_Register(HPROTOCOL hProtocol) { register DWORD i;
CreatePropertyDatabase(hProtocol, nresmonProperties);
for (i = 0; i < nresmonProperties; ++i) { AddProperty(hProtocol, &resmon_Database[i]); } }
VOID WINAPI resmon_Deregister(HPROTOCOL hProtocol) { DestroyPropertyDatabase(hProtocol); }
LPBYTE WINAPI resmon_RecognizeFrame(HFRAME hFrame, LPBYTE MacFrame, LPBYTE lpFrame, DWORD MacType, DWORD FrameLength, HPROTOCOL hPreviousProtocol, DWORD hPreviousProtocolOffset, LPDWORD ProtocolStatusCode, LPHPROTOCOL hNextProtocol, LPDWORD InstData) { HPROTOCOL hNext=NULL; // next protocol to hand off to...
WORD nStubLength;
*ProtocolStatusCode = PROTOCOL_STATUS_CLAIMED;
// IF MSRPC VERSION == 4 AND AUTHPROTID !=0 THEN PASS OFF TO SSP
if((*(MacFrame + hPreviousProtocolOffset) == 4) && (*(MacFrame + hPreviousProtocolOffset + 78))) { hNext = GetProtocolFromName("SSP"); if(hNext) { *ProtocolStatusCode = PROTOCOL_STATUS_NEXT_PROTOCOL; *hNextProtocol = hNext; nStubLength = *((LPWORD)(MacFrame + hPreviousProtocolOffset + 74)); return(lpFrame + nStubLength); } }
return(NULL); }
DWORD WINAPI resmon_FormatProperties(HFRAME hFrame, LPBYTE MacFrame, LPBYTE lpFrame, DWORD nPropertyInsts, LPPROPERTYINST lpInst) { while (nPropertyInsts--) { ((FORMAT)lpInst->lpPropertyInfo->InstanceData)(lpInst); lpInst++; }
return(BHERR_SUCCESS); }
LPBYTE WINAPI resmon_AttachProperties(HFRAME hFrame, LPBYTE MacFrame, LPBYTE lpFrame, DWORD MacType, DWORD FrameLength, HPROTOCOL hPreviousProtocol, DWORD hPreviousProtocolOffset, DWORD InstData) { CHAR AuthenticationProtocolID = 0; WORD nRPCLength; CHAR AuthenticationLevel; nPropertyLevel = 1; fIgnoreFlatPart = FALSE; fIgnorePointers = FALSE;
Conformance = 0; fConformanceIsSet = FALSE;
// IF THE MSRPC VERSION IS 4 LOOK FOR SECURITY TRAILER
if(*(MacFrame + hPreviousProtocolOffset) == 4) { AuthenticationProtocolID = *(MacFrame + hPreviousProtocolOffset + 78); nRPCLength = *((LPWORD)(MacFrame + hPreviousProtocolOffset + 74)); AuthenticationLevel = *(lpFrame + nRPCLength); }
// CHECK FOR ENCRYPTION
if(AuthenticationProtocolID && (AuthenticationLevel == 6)) { AttachPropertyInstance(hFrame, resmon_Database[I0_ENCRYPTED].hProperty, nRPCLength, lpFrame, 0, 0, 0); } else { switch (InstData & 0xffffL) { case 0: /* Handler for procedure RmCreateResource() */ resmon_RmCreateResource_AttachProperties(hFrame, lpFrame, FrameLength, 0, InstData); break;
case 1: /* Handler for procedure RmCloseResource() */ resmon_RmCloseResource_AttachProperties(hFrame, lpFrame, FrameLength, 0, InstData); break;
case 2: /* Handler for procedure RmChangeResourceParams() */ resmon_RmChangeResourceParams_AttachProperties(hFrame, lpFrame, FrameLength, 0, InstData); break;
case 3: /* Handler for procedure RmOnlineResource() */ resmon_RmOnlineResource_AttachProperties(hFrame, lpFrame, FrameLength, 0, InstData); break;
case 4: /* Handler for procedure RmOfflineResource() */ resmon_RmOfflineResource_AttachProperties(hFrame, lpFrame, FrameLength, 0, InstData); break;
case 5: /* Handler for procedure RmTerminateResource() */ resmon_RmTerminateResource_AttachProperties(hFrame, lpFrame, FrameLength, 0, InstData); break;
case 6: /* Handler for procedure RmArbitrateResource() */ resmon_RmArbitrateResource_AttachProperties(hFrame, lpFrame, FrameLength, 0, InstData); break;
case 7: /* Handler for procedure RmReleaseResource() */ resmon_RmReleaseResource_AttachProperties(hFrame, lpFrame, FrameLength, 0, InstData); break;
case 8: /* Handler for procedure RmNotifyChanges() */ resmon_RmNotifyChanges_AttachProperties(hFrame, lpFrame, FrameLength, 0, InstData); break;
case 9: /* Handler for procedure RmFailResource() */ resmon_RmFailResource_AttachProperties(hFrame, lpFrame, FrameLength, 0, InstData); break;
case 10: /* Handler for procedure RmShutdownProcess() */ resmon_RmShutdownProcess_AttachProperties(hFrame, lpFrame, FrameLength, 0, InstData); break;
case 11: /* Handler for procedure RmResourceControl() */ resmon_RmResourceControl_AttachProperties(hFrame, lpFrame, FrameLength, 0, InstData); break;
case 12: /* Handler for procedure RmResourceTypeControl() */ resmon_RmResourceTypeControl_AttachProperties(hFrame, lpFrame, FrameLength, 0, InstData); break;
default: /* Error: bad OpCode */ AttachPropertyInstance(hFrame, resmon_Database[I0_ERROR_BAD_OPCODE].hProperty, FrameLength, lpFrame, 0, 0, 0); }
} return(NULL); }
|