windows-nt/Source/XPSP1/NT/base/cluster/bh/parsers/rescmon/skeleton.c

259 lines
7.5 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*
* 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);
}