⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rpc.c

📁 ReactOS是一些高手根据Windows XP的内核编写出的类XP。内核实现机理和API函数调用几乎相同。甚至可以兼容XP的程序。喜欢研究系统内核的人可以看一看。
💻 C
字号:
/*
 * PROJECT:          ReactOS kernel
 * LICENSE:          GPL - See COPYING in the top level directory
 * FILE:             services/eventlog/rpc.c
 * PURPOSE:          Event logging service
 * COPYRIGHT:        Copyright 2005 Saveliy Tretiakov            
 */

/* INCLUDES *****************************************************************/

#include "eventlog.h"

#ifdef __GNUC__
/* HACK as long as idl compiler doesn't support well PUNICODE_STRING args */
#define PANSI_STRING LPSTR
#define PUNICODE_STRING LPWSTR
#define BINDING_HANDLE handle_t BindingHandle,
#else
#define BINDING_HANDLE
#endif

/* FUNCTIONS ****************************************************************/

DWORD STDCALL RpcThreadRoutine(LPVOID lpParameter)
{
    RPC_STATUS Status;

    Status = RpcServerUseProtseqEpW(L"ncacn_np", 20, L"\\pipe\\EventLog", NULL);
    if (Status != RPC_S_OK)
    {
        DPRINT("RpcServerUseProtseqEpW() failed (Status %lx)\n", Status);
        return 0;
    }

#ifdef _MSC_VER
    Status = RpcServerRegisterIf(eventlog_v0_0_s_ifspec, NULL, NULL);
#else
    Status = RpcServerRegisterIf(eventlog_ServerIfHandle, NULL, NULL);
#endif

    if (Status != RPC_S_OK)
    {
        DPRINT("RpcServerRegisterIf() failed (Status %lx)\n", Status);
        return 0;
    }

    Status = RpcServerListen(1, RPC_C_LISTEN_MAX_CALLS_DEFAULT, FALSE);

    if (Status != RPC_S_OK)
    {
        DPRINT("RpcServerListen() failed (Status %lx)\n", Status);
    }

    return 0;
}

/* Function 0x00 */
NTSTATUS ElfrClearELFW(
    BINDING_HANDLE
    /* [in] */  LOGHANDLE Handle,
    /* [in] */  PUNICODE_STRING BackupName)
{
    UNIMPLEMENTED;
    return STATUS_NOT_IMPLEMENTED;
}

/* Function 0x01 */
NTSTATUS ElfrBackupELFW(
    BINDING_HANDLE
    /* [in] */  LOGHANDLE Handle,
    /* [in] */  PUNICODE_STRING BackupName)
{
    UNIMPLEMENTED;
    return STATUS_NOT_IMPLEMENTED;
}


/* Function 0x02 */
NTSTATUS ElfrCloseEL(
    BINDING_HANDLE
    /* [out][in] */ PLOGHANDLE Handle)
{
    UNIMPLEMENTED;
    return STATUS_NOT_IMPLEMENTED;
}


/* Function 0x03 */
NTSTATUS ElfrDeregisterEventSource(
    BINDING_HANDLE
    /* [out][in] */ PLOGHANDLE Handle)
{
    UNIMPLEMENTED;
    return STATUS_NOT_IMPLEMENTED;
}


/* Function 0x04 */
NTSTATUS ElfrNumberOfRecords(
    BINDING_HANDLE
    /* [in] */  LOGHANDLE Handle,
    /* [out] */ long __RPC_FAR * NumberOfRecords)
{
    UNIMPLEMENTED;
    return STATUS_NOT_IMPLEMENTED;
}


/* Function 0x05 */
NTSTATUS ElfrOldestRecord(
    BINDING_HANDLE
    /* [in] */  LOGHANDLE LogHandle,
    /* [out] */ long __RPC_FAR * OldestRecNumber)
{
    UNIMPLEMENTED;
    return STATUS_NOT_IMPLEMENTED;
}


/* Function 0x06 */
NTSTATUS ElfrChangeNotify(void)
{
    UNIMPLEMENTED;
    return STATUS_NOT_IMPLEMENTED;
}


/* Function 0x07 */
NTSTATUS ElfrOpenELW(
    BINDING_HANDLE
    /* [unique][in] */  LPWSTR ServerName,
    /* [in] */  PUNICODE_STRING FileName,
    /* [in] */  PUNICODE_STRING NullStr,
    /* [in] */  long MajorVer,
    /* [in] */  long MinorVer,
    /* [out] */ PLOGHANDLE Handle)
{
    UNIMPLEMENTED;
    return STATUS_NOT_IMPLEMENTED;
}


/* Function 0x08 */
NTSTATUS ElfrRegisterEventSourceW(
    BINDING_HANDLE
    /* [unique][in] */  LPWSTR ServerName,
    /* [in] */  PUNICODE_STRING LogName,
    /* [in] */  PUNICODE_STRING NullStr,
    /* [in] */  long MajorVer,
    /* [in] */  long MinorVer,
    /* [out] */ PLOGHANDLE Handle)
{
    UNIMPLEMENTED;
    return STATUS_NOT_IMPLEMENTED;
}


/* Function 0x09 */
NTSTATUS ElfrOpenBELW(
    BINDING_HANDLE
    /* [unique][in] */  LPWSTR ServerName,
    /* [in] */  PUNICODE_STRING BackupName,
    /* [in] */  long MajorVer,
    /* [in] */  long MinorVer,
    /* [out] */ PLOGHANDLE Handle)
{
    UNIMPLEMENTED;
    return STATUS_NOT_IMPLEMENTED;
}


/* Function 0x0a */
NTSTATUS ElfrReadELW(
    BINDING_HANDLE
    /* [in] */  LOGHANDLE Handle,
    /* [in] */  long Flags,
    /* [in] */  long Offset,
    /* [in] */  long BufSize,
    /* [size_is][out] */unsigned char __RPC_FAR * Buffer,
    /* [out] */ long __RPC_FAR * BytesRead,
    /* [out] */ long __RPC_FAR * BytesNeeded)
{
    UNIMPLEMENTED;
    return STATUS_NOT_IMPLEMENTED;
}


/* Function 0x0b */
NTSTATUS ElfrReportEventW(
    BINDING_HANDLE
    /* [in] */  LOGHANDLE Handle,
    /* [in] */  long Time,
    /* [in] */  short Type,
    /* [in] */  short Category,
    /* [in] */  long ID,
    /* [in] */  short NumStrings,
    /* [in] */  long DataSize,
    /* [in] */  PUNICODE_STRING ComputerName,
    /* [unique][in] */          unsigned char __RPC_FAR * SID,
    /* [unique][size_is][in] */ PUNICODE_STRING __RPC_FAR Strings[],
    /* [unique][size_is][in] */ unsigned char __RPC_FAR * Data,
    /* [in] */                  short Flags,
    /* [unique][out][in] */     long __RPC_FAR * unknown1,
    /* [unique][out][in] */     long __RPC_FAR * unknown2)
{
    UNIMPLEMENTED;
    return STATUS_NOT_IMPLEMENTED;
}


/* Function 0x0c */
NTSTATUS ElfrClearELFA(
    BINDING_HANDLE
    /* [in] */          LOGHANDLE Handle,
    /* [unique][in] */  PANSI_STRING BackupName)
{
    UNIMPLEMENTED;
    return STATUS_NOT_IMPLEMENTED;
}


/* Function 0x0d */
NTSTATUS ElfrBackupELFA(
    BINDING_HANDLE
    /* [in] */  LOGHANDLE Handle,
    /* [in] */  PANSI_STRING BackupName)
{
    UNIMPLEMENTED;
    return STATUS_NOT_IMPLEMENTED;
}


/* Function 0x0e */
NTSTATUS ElfrOpenELA(
    BINDING_HANDLE
    /* [unique][in] */  LPSTR ServerName,
    /* [in] */  PANSI_STRING LogName,
    /* [in] */  PANSI_STRING NullStr,
    /* [in] */  long MajorVer,
    /* [in] */  long MinorVer,
    /* [out] */ PLOGHANDLE Handle)
{
    UNICODE_STRING logname = { 0, }, servername = { 0, }, StrNull = { 0, };
    NTSTATUS status;

    if (LogName && !RtlCreateUnicodeStringFromAsciiz(&logname, LogName))
    {
        return STATUS_NO_MEMORY;
    }

    if (ServerName &&
        !RtlCreateUnicodeStringFromAsciiz(&servername, ServerName))
    {
        RtlFreeUnicodeString(&logname);
        return STATUS_NO_MEMORY;
    }

    status = ElfrOpenELW(BindingHandle, servername.Buffer, logname.Buffer,
                         StrNull.Buffer, MajorVer, MinorVer, Handle);

    RtlFreeUnicodeString(&servername);
    RtlFreeUnicodeString(&logname);

    return status;
}


/* Function 0x0f */
NTSTATUS ElfrRegisterEventSourceA(
    BINDING_HANDLE
    /* [unique][in] */  LPSTR ServerName,
    /* [in] */  PANSI_STRING LogName,
    /* [in] */  PANSI_STRING NullStr,
    /* [in] */  long MajorVer,
    /* [in] */  long MinorVer,
    /* [out] */ PLOGHANDLE Handle)
{
    UNIMPLEMENTED;
    return STATUS_NOT_IMPLEMENTED;
}


/* Function 0x10 */
NTSTATUS ElfrOpenBELA(
    BINDING_HANDLE
    /* [unique][in] */  LPSTR ServerName,
    /* [in] */  PANSI_STRING BakckupName,
    /* [in] */  long MajorVer,
    /* [in] */  long MinorVer,
    /* [out] */ PLOGHANDLE Handle)
{
    UNIMPLEMENTED;
    return STATUS_NOT_IMPLEMENTED;
}


/* Function 0x11 */
NTSTATUS ElfrReadELA(
    BINDING_HANDLE
    /* [in] */  LOGHANDLE Handle,
    /* [in] */  long Flags,
    /* [in] */  long Offset,
    /* [in] */  long BufSize,
    /* [size_is][out] */unsigned char __RPC_FAR * Buffer,
    /* [out] */ long __RPC_FAR * BytesRead,
    /* [out] */ long __RPC_FAR * BytesNeeded)
{
    UNIMPLEMENTED;
    return STATUS_NOT_IMPLEMENTED;
}


/* Function 0x12 */
NTSTATUS ElfrReportEventA(
    BINDING_HANDLE
    /* [in] */  LOGHANDLE Handle,
    /* [in] */  long Time,
    /* [in] */  short Type,
    /* [in] */  short Category,
    /* [in] */  long ID,
    /* [in] */  short NumStrings,
    /* [in] */  long DataSize,
    /* [in] */  PANSI_STRING ComputerName,
    /* [unique][in] */  unsigned char __RPC_FAR * SID,
    /* [unique][size_is][in] */ PANSI_STRING __RPC_FAR Strings[],
    /* [unique][size_is][in] */ unsigned char __RPC_FAR * Data,
    /* [in] */                  short Flags,
    /* [unique][out][in] */     long __RPC_FAR * unknown1,
    /* [unique][out][in] */     long __RPC_FAR * unknown2)
{
    UNIMPLEMENTED;
    return STATUS_NOT_IMPLEMENTED;
}


/* Function 0x13 */
NTSTATUS ElfrRegisterClusterSvc(void)
{
    UNIMPLEMENTED;
    return STATUS_NOT_IMPLEMENTED;
}


/* Function 0x14 */
NTSTATUS ElfrDeregisterClusterSvc(void)
{
    UNIMPLEMENTED;
    return STATUS_NOT_IMPLEMENTED;
}


/* Function 0x15 */
NTSTATUS ElfrWriteClusterEvents(void)
{
    UNIMPLEMENTED;
    return STATUS_NOT_IMPLEMENTED;
}


/* Function 0x16 */
NTSTATUS ElfrGetLogInformation(
    BINDING_HANDLE
    /* [in] */  LOGHANDLE Handle,
    /* [in] */  long InfoLevel,
    /* [size_is][out] */unsigned char __RPC_FAR * Buffer,
    /* [in] */  long BufSize,
    /* [out] */ long __RPC_FAR * BytesNeeded)
{
    UNIMPLEMENTED;
    return STATUS_NOT_IMPLEMENTED;
}


/* Function 0x17 */
NTSTATUS ElfrFlushEL(
    BINDING_HANDLE
    /* [in] */  LOGHANDLE Handle)
{
    DbgPrint("EventLogFlush UNIMPLEMENTED\n");
    return STATUS_NOT_IMPLEMENTED;
}

void __RPC_FAR *__RPC_USER midl_user_allocate(size_t len)
{
    return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len);
}

void __RPC_USER midl_user_free(void __RPC_FAR * ptr)
{
    HeapFree(GetProcessHeap(), 0, ptr);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -