136 lines
3 KiB
C
136 lines
3 KiB
C
|
//+---------------------------------------------------------------------------
|
|||
|
//
|
|||
|
// Microsoft Windows
|
|||
|
// Copyright (C) Microsoft Corporation, 1997 - 1997.
|
|||
|
//
|
|||
|
// File: EVENT.C
|
|||
|
//
|
|||
|
// Contents: Routines used by the event viewer to map GUIDs to names
|
|||
|
//
|
|||
|
// History: 25-Oct-97 CliffV Created
|
|||
|
//
|
|||
|
//----------------------------------------------------------------------------
|
|||
|
#include <nt.h>
|
|||
|
#include <ntrtl.h>
|
|||
|
#include <nturtl.h>
|
|||
|
#include <windows.h>
|
|||
|
#include <rpc.h>
|
|||
|
#include <rpcdce.h>
|
|||
|
#include <lucache.h>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
DWORD
|
|||
|
EventGuidToName(
|
|||
|
IN LPCWSTR Source,
|
|||
|
IN LPCWSTR GuidString,
|
|||
|
OUT LPWSTR *NameString
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
General purpose routine used by the event viewer to translate from a GUID
|
|||
|
in an event log message to a name of the GUID.
|
|||
|
|
|||
|
This instance of the routine translates the following GUID types:
|
|||
|
Object Class Guids (e.g., user)
|
|||
|
Property set Guids (e.g., ATT_USER_PRINCIPLE_NAME)
|
|||
|
Property Guids (e.g., adminDisplayName)
|
|||
|
Object Guids (e.g., <DnsDomainName>/Users/<UserName>)
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
Source - Specifies the source of the GUID. The routine will use this field
|
|||
|
to differentiate between multiple sources potentially implemented by
|
|||
|
the routine.
|
|||
|
|
|||
|
This instance of the routine requires the Source to be
|
|||
|
ACCESS_DS_SOURCE_W.
|
|||
|
|
|||
|
GuidString - A string-ized version of the GUID to translate. The GUID should
|
|||
|
be in the form 33ff431c-4d78-11d1-b61a-00c04fd8ebaa.
|
|||
|
|
|||
|
NameString - Returns the name that corresponds to the GUID. If the name cannot
|
|||
|
be found, a stringized version of the GUID is returned.
|
|||
|
The name should be freed by calling EventNameFree.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
NO_ERROR - The Name was successfully translated.
|
|||
|
|
|||
|
ERROR_NOT_ENOUGH_MEMORY - There was not enough memory to complete the operation.
|
|||
|
|
|||
|
ERROR_INVALID_PARAMETER - Source is not supported.
|
|||
|
|
|||
|
RPC_S_INVALID_STRING_UUID - Syntax of GuidString is invalid
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
DWORD dwErr;
|
|||
|
GUID Guid;
|
|||
|
|
|||
|
//
|
|||
|
// Ensure the source is one we recognize.
|
|||
|
//
|
|||
|
|
|||
|
if ( _wcsicmp( Source, ACCESS_DS_SOURCE_W) != 0 ) {
|
|||
|
return ERROR_INVALID_PARAMETER;
|
|||
|
}
|
|||
|
|
|||
|
//
|
|||
|
// Convert the specified GUID to binary.
|
|||
|
//
|
|||
|
|
|||
|
dwErr = UuidFromString((LPWSTR)GuidString, &Guid);
|
|||
|
|
|||
|
if ( dwErr != NO_ERROR ) {
|
|||
|
return dwErr;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// Convert the GUID to a name.
|
|||
|
//
|
|||
|
|
|||
|
dwErr = AccctrlLookupIdName(
|
|||
|
NULL, // No existing LDAP handle
|
|||
|
L"", // Only the root path
|
|||
|
&Guid,
|
|||
|
TRUE, // Allocate the return buffer
|
|||
|
TRUE, // Handle individual object GUIDs
|
|||
|
NameString );
|
|||
|
|
|||
|
return dwErr;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
VOID
|
|||
|
EventNameFree(
|
|||
|
IN LPCWSTR NameString
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Routine to free strings returned by EventNameFree.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
NameString - Returns the name that corresponds to the GUID.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
LocalFree((PVOID)NameString);
|
|||
|
}
|