259 lines
7.5 KiB
C
259 lines
7.5 KiB
C
|
|
/*
|
|
* 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);
|
|
}
|
|
|