/* Function 3 */ NTSTATUS ElfrDeregisterEventSource( IELF_HANDLE *LogHandle) { if (!ElfDeleteEventLogHandle(*LogHandle)) { return STATUS_INVALID_HANDLE; } return STATUS_SUCCESS; }
/* Function 2 */ NTSTATUS ElfrCloseEL( IELF_HANDLE *LogHandle) { if (!ElfDeleteEventLogHandle(*LogHandle)) { return STATUS_INVALID_HANDLE; } return STATUS_SUCCESS; }
DWORD WINAPI RpcThreadRoutine(LPVOID lpParameter) { RPC_STATUS Status; InitializeCriticalSection(&LogHandleListCs); InitializeListHead(&LogHandleListHead); Status = RpcServerUseProtseqEpW(L"ncacn_np", 20, L"\\pipe\\EventLog", NULL); if (Status != RPC_S_OK) { DPRINT("RpcServerUseProtseqEpW() failed (Status %lx)\n", Status); goto Quit; } Status = RpcServerRegisterIf(eventlog_v0_0_s_ifspec, NULL, NULL); if (Status != RPC_S_OK) { DPRINT("RpcServerRegisterIf() failed (Status %lx)\n", Status); goto Quit; } Status = RpcServerListen(1, RPC_C_LISTEN_MAX_CALLS_DEFAULT, FALSE); if (Status != RPC_S_OK) { DPRINT("RpcServerListen() failed (Status %lx)\n", Status); } EnterCriticalSection(&LogHandleListCs); while (!IsListEmpty(&LogHandleListHead)) { IELF_HANDLE LogHandle = (IELF_HANDLE)CONTAINING_RECORD(LogHandleListHead.Flink, LOGHANDLE, LogHandleListEntry); ElfDeleteEventLogHandle(&LogHandle); } LeaveCriticalSection(&LogHandleListCs); Quit: DeleteCriticalSection(&LogHandleListCs); return 0; }
/* Function 3 */ NTSTATUS ElfrDeregisterEventSource( PIELF_HANDLE LogHandle) { return ElfDeleteEventLogHandle(LogHandle); }
/* Function 2 */ NTSTATUS ElfrCloseEL( PIELF_HANDLE LogHandle) { return ElfDeleteEventLogHandle(LogHandle); }
void __RPC_USER IELF_HANDLE_rundown(IELF_HANDLE LogHandle) { /* Close the handle */ ElfDeleteEventLogHandle(&LogHandle); // ElfrCloseEL(&LogHandle); }