133 lines
2.7 KiB
C++
133 lines
2.7 KiB
C++
|
/*++
|
||
|
|
||
|
Copyright (c) 2000 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
kerbtrace.cxx
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Set up event tracing for Kerberos
|
||
|
|
||
|
Author:
|
||
|
|
||
|
15 June 2000 t-ryanj (* largely stolen from kdctrace.cxx *)
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
|
||
|
#include <kerb.hxx>
|
||
|
#include <wmistr.h>
|
||
|
#define INITGUID
|
||
|
#include "kerbdbg.h"
|
||
|
|
||
|
#define RESOURCE_NAME __TEXT("MOF_RESOURCE") // kerberos.mof => kerberos.bmf => MOF_RESOURCE
|
||
|
#define IMAGE_PATH __TEXT("kerberos.dll")
|
||
|
|
||
|
BOOLEAN KerbEventTraceFlag = FALSE;
|
||
|
TRACEHANDLE KerbTraceRegistrationHandle = (TRACEHANDLE) 0;
|
||
|
TRACEHANDLE KerbTraceLoggerHandle = (TRACEHANDLE) 0;
|
||
|
|
||
|
|
||
|
ULONG
|
||
|
KerbTraceControlCallback(
|
||
|
IN WMIDPREQUESTCODE RequestCode,
|
||
|
IN PVOID RequestContext,
|
||
|
IN OUT ULONG *InOutBufferSize,
|
||
|
IN OUT PVOID Buffer
|
||
|
);
|
||
|
|
||
|
TRACE_GUID_REGISTRATION KerbTraceGuids[] =
|
||
|
{
|
||
|
{ &KerbLogonGuid, NULL },
|
||
|
{ &KerbInitSCGuid, NULL },
|
||
|
{ &KerbAcceptSCGuid, NULL },
|
||
|
{ &KerbSetPassGuid, NULL },
|
||
|
{ &KerbChangePassGuid, NULL }
|
||
|
};
|
||
|
|
||
|
#define KerbGuidCount (sizeof(KerbTraceGuids) / sizeof(TRACE_GUID_REGISTRATION))
|
||
|
|
||
|
ULONG
|
||
|
KerbInitializeTrace(
|
||
|
VOID
|
||
|
)
|
||
|
{
|
||
|
ULONG status;
|
||
|
HMODULE hModule;
|
||
|
TCHAR FileName[MAX_PATH+1];
|
||
|
DWORD nLen = 0;
|
||
|
|
||
|
hModule = GetModuleHandle(IMAGE_PATH);
|
||
|
if (hModule != NULL) {
|
||
|
nLen = GetModuleFileName(hModule, FileName, MAX_PATH);
|
||
|
}
|
||
|
if (nLen == 0) {
|
||
|
lstrcpy(FileName, IMAGE_PATH);
|
||
|
}
|
||
|
|
||
|
status = RegisterTraceGuids(
|
||
|
KerbTraceControlCallback,
|
||
|
NULL,
|
||
|
&KerbControlGuid,
|
||
|
KerbGuidCount,
|
||
|
KerbTraceGuids,
|
||
|
(LPCWSTR) FileName,
|
||
|
(LPCWSTR) RESOURCE_NAME,
|
||
|
&KerbTraceRegistrationHandle);
|
||
|
|
||
|
|
||
|
if (status != ERROR_SUCCESS) {
|
||
|
DebugLog((DEB_ERROR,"Trace registration failed with %x\n",status));
|
||
|
}
|
||
|
return status;
|
||
|
}
|
||
|
|
||
|
|
||
|
ULONG
|
||
|
KerbTraceControlCallback(
|
||
|
IN WMIDPREQUESTCODE RequestCode,
|
||
|
IN PVOID RequestContext,
|
||
|
IN OUT ULONG *InOutBufferSize,
|
||
|
IN OUT PVOID Buffer
|
||
|
)
|
||
|
{
|
||
|
ULONG Status;
|
||
|
ULONG RetSize;
|
||
|
|
||
|
Status = ERROR_SUCCESS;
|
||
|
|
||
|
switch (RequestCode)
|
||
|
{
|
||
|
case WMI_ENABLE_EVENTS:
|
||
|
{
|
||
|
KerbTraceLoggerHandle =
|
||
|
GetTraceLoggerHandle(Buffer);
|
||
|
KerbEventTraceFlag = TRUE;
|
||
|
RetSize = 0;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
case WMI_DISABLE_EVENTS:
|
||
|
{
|
||
|
KerbEventTraceFlag = FALSE;
|
||
|
RetSize = 0;
|
||
|
KerbTraceLoggerHandle = (TRACEHANDLE) 0;
|
||
|
break;
|
||
|
}
|
||
|
default:
|
||
|
{
|
||
|
RetSize = 0;
|
||
|
Status = ERROR_INVALID_PARAMETER;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
*InOutBufferSize = RetSize;
|
||
|
return Status;
|
||
|
}
|