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

📄 cfgmgr.c

📁 vc环境下的pgp源码
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "version.h"

#include "vpn.h"
#ifndef DBG_MESSAGE
#define DBG_MESSAGE 1
#endif
#include "vpndbg.h"

#include "pgpNetKernel.h"
#include "pgpNetKernelXChng.h"

#ifdef CHICAGO
#include "pgpvm.h"
#include "vxdevent.h"
#endif

#ifdef PM_EMULATION
#include "dummypm.h"
#endif

extern PVPN_ADAPTER VpnAdapterGlobal;

const NDIS_OID ConfigManagerSupportedOidList[] =
{
	OID_PGP_WIN32_IOCTL,
	OID_PGP_EVENT_CREATE,
	OID_PGP_EVENT_DESTROY,

	OID_PGP_SHARED_MEM_ALLOC,
	OID_PGP_SHARED_MEM_FREE,

	OID_PGP_NEWCONFIG,
	OID_PGP_NEWHOST,
	OID_PGP_NEWSA,
	OID_PGP_SADIED,
	OID_PGP_SAFAILED,
	OID_PGP_SAUPDATE,
	OID_PGP_ALLHOSTS,
	OID_PGP_SHUTDOWN,
	OID_PGP_LOCALIP,

	OID_PGP_QUEUE_INITIALIZE,
	OID_PGP_QUEUE_RELEASE,


#ifdef PM_EMULATION
	OID_PGP_NEW_DUMMY_HOST,
	OID_PGP_NEW_DUMMY_SA,
#endif PM_EMULATION

	OID_PGP_EVENT_SET,

	OID_PGP_GET_SEND_PACKETS,
	OID_PGP_GET_RECEIVE_PACKETS
};

VOID PgpEventCreate(
    IN PPGPEVENT_CONTEXT    pPgpEvent
    )
{
    DBG_FUNC("PgpEventOpen")

#ifdef CHICAGO

	DBG_ENTER();

#else

    UNICODE_STRING          UnicodeName;
    WCHAR                   UnicodeBuffer[128];
    
    DBG_ENTER();



    UnicodeName.MaximumLength = sizeof(UnicodeBuffer);
    UnicodeName.Length = 0;
    UnicodeName.Buffer = UnicodeBuffer;
    memset(UnicodeBuffer, 0, sizeof(UnicodeBuffer));
    RtlAppendUnicodeToString(&UnicodeName, L"\\BaseNamedObjects\\");
    RtlAppendUnicodeToString(&UnicodeName, (PWCHAR) &pPgpEvent->EventName[0]);

    pPgpEvent->DriverEventObject = IoCreateSynchronizationEvent(
                                        &UnicodeName,
                                        &pPgpEvent->DriverEventHandle);
    if (pPgpEvent->DriverEventObject == NULL)
    { 
        DBG_PRINT(("IoCreateSynchronizationEvent FAILED\n"););
        pPgpEvent->DriverEventHandle = NULL;
    } 
    else
    {
        DBG_PRINT(("SUCCESS Name=%ls\n",pPgpEvent->EventName););
        KeClearEvent(pPgpEvent->DriverEventObject); 
    }
#endif

    DBG_LEAVE(0);
}

VOID PgpEventClose(
    IN PPGPEVENT_CONTEXT    pPgpEvent
    )
{
    DBG_FUNC("PgpEventClose")

    DBG_ENTER();

#ifdef CHICAGO
	if (pPgpEvent->DriverEventHandle)
	{
		_VWIN32_CloseVxDHandle((ULONG)pPgpEvent->DriverEventHandle);
		pPgpEvent->DriverEventHandle = NULL;

	}
#else
    if (pPgpEvent->DriverEventHandle)
    {
        ZwClose(pPgpEvent->DriverEventHandle);
        pPgpEvent->DriverEventObject = NULL;
        pPgpEvent->DriverEventHandle = NULL;
    }
#endif

    DBG_LEAVE(0);
}

VOID PgpEventSet(
    IN PPGPEVENT_CONTEXT    pPgpEvent
    )
{
    DBG_FUNC("PgpEventSet")

    DBG_ENTER();

#ifdef CHICAGO
	if (pPgpEvent->DriverEventHandle != NULL)
	{
		PVPN_ADAPTER adapter = VpnAdapterGlobal;

		NdisUpdateSharedMemory(adapter->NdisAdapterRegistrationHandle,
								adapter->SharedMemorySize,
								&adapter->SharedMemoryPtr,
								&adapter->SharedMemoryPhysicalAddress);
					
		//CallWin32Event((ULONG)pPgpEvent->DriverEventHandle);
		NdisSetTimer(&VpnAdapterGlobal->event_timer, 1000 /* 1 second? */);
	}
#else
    if (pPgpEvent->DriverEventObject != NULL)
    {
        KeSetEvent(pPgpEvent->DriverEventObject, 0, FALSE);
    }
#endif

    DBG_LEAVE(0);
}    

PVOID PgpMemoryMapWin32Address(
    IN NDIS_PHYSICAL_ADDRESS    PhysicalAddress,
    IN PVOID                    LinearAddress,
    IN ULONG                    NumBytes,
    IN HANDLE                   ProcessHandle
    )
{
    DBG_FUNC("PgpMemoryMapWin32Address")

    PVOID                       virtualAddress = NULL;
	NTSTATUS                    ntStatus;
#ifdef CHICAGO
	virtualAddress = MemPageLock((ULONG)LinearAddress, NumBytes);
	ntStatus	=	STATUS_SUCCESS;
#else // !CHICAGO
    NDIS_STRING                 physicalMemoryUnicodeString = NDIS_STRING_CONST("\\Device\\PhysicalMemory");
    OBJECT_ATTRIBUTES           objectAttributes;
    HANDLE                      physicalMemoryHandle  = NULL;
    PVOID                       PhysicalMemorySection = NULL;
    NDIS_PHYSICAL_ADDRESS       viewBase;

    DBG_ENTER();

    InitializeObjectAttributes(&objectAttributes,
                               &physicalMemoryUnicodeString,
                               OBJ_CASE_INSENSITIVE,
                               (HANDLE) NULL,
                               (PSECURITY_DESCRIPTOR) NULL);

    ntStatus = ZwOpenSection(&physicalMemoryHandle,
                             SECTION_ALL_ACCESS,
                             &objectAttributes);

    if (!NT_SUCCESS(ntStatus))
    {
        DBG_PRINT(("!!!!! ZwOpenSection failed\n"););
        goto error_out;
    }

    ntStatus = ObReferenceObjectByHandle(physicalMemoryHandle,
                                         SECTION_ALL_ACCESS,
                                         (POBJECT_TYPE) NULL,
                                         KernelMode,
                                         &PhysicalMemorySection,
                                         (POBJECT_HANDLE_INFORMATION) NULL);

    if (!NT_SUCCESS(ntStatus))
    {
        DBG_PRINT(("!!!!!ObReferenceObjectByHandle failed\n"););
        goto close_handle;
    }

    viewBase = PhysicalAddress;

    ntStatus = ZwMapViewOfSection(physicalMemoryHandle,
                                  ProcessHandle,
                                  &virtualAddress,
                                  0L,
                                  NumBytes,
                                  &viewBase,
                                  &NumBytes,
                                  ViewShare,
                                  0,
                                  PAGE_READWRITE | PAGE_NOCACHE);

    if (!NT_SUCCESS(ntStatus))
    {
        DBG_PRINT(("!!!!! ZwMapViewOfSection failed\n"););
        goto close_handle;
    }

    (ULONG) virtualAddress += (ULONG)PhysicalAddress.LowPart -
                              (ULONG)viewBase.LowPart;

close_handle:

    ZwClose(physicalMemoryHandle);

error_out:
#endif // CHICAGO

    DBG_LEAVE(ntStatus);

    return (virtualAddress);
}

VOID PgpMemoryUnmapWin32Address(
    IN PVOID                    VirtualAddress,
    IN ULONG                    NumBytes,
    IN HANDLE                   ProcessHandle
    )
{
    DBG_FUNC("PgpMemoryUnmapWin32Address")

    DBG_ENTER();
#ifdef CHICAGO
	MemPageUnlock((ULONG)VirtualAddress, NumBytes);
#else // !CHICAGO
    ZwUnmapViewOfSection(ProcessHandle, VirtualAddress);
#endif // CHICAGO

    DBG_LEAVE(0);
}

#ifdef PM_EMULATION
#pragma warning(disable:4035)
#pragma warning(disable:4005)

PGPError
PGPnetPMNewSA(struct _PGPnetPMContext *pContext,
			  void *data,
			  UINT dataLen,
			  ULONG *pSrcBufferLen){}

PGPError
PGPnetPMRemoveSA(struct _PGPnetPMContext *pContext,
				 void *data,
				 UINT dataLen,
				 ULONG *pSrcBufferLen){}

PGPError
PGPnetPMFailedSA(struct _PGPnetPMContext *pContext,
				 void *data,
				 UINT dataLen,
				 ULONG *pSrcBufferLen){}

PGPError
PGPnetPMUpdateSA(struct _PGPnetPMContext *pContext,
				 void *data,
				 UINT dataLen,
				 ULONG *pSrcBufferLen){}

PGPError
PGPnetPMNewHost(struct _PGPnetPMContext *pContext,
				void *data,
				UINT dataLen,
				ULONG *pSrcBufferLen){}

NDIS_STATUS
PGPnetPMNewConfig(struct _PGPnetPMContext *pContext,
				  void *data,
				  UINT dataLen,
				  ULONG *pSrcBufferLen){}
#pragma warning(default:4035)
#pragma warning(default:4005)

#endif

NDIS_STATUS  ConfigurationIoctl(
    IN PVPN_ADAPTER	adapter,
    IN NDIS_OID     Oid,         
    IN OUT PVOID    InformationBuffer,
    IN UINT         InformationBufferLength,
    IN OUT PUINT    BytesWritten,           
    IN OUT PUINT    BytesNeeded             
    )
{
    DBG_FUNC("ConfigurationIoctl")
    
    
    NDIS_STATUS  status;

    PVOID        SourceBuffer;
    ULONG        SourceBufferLength;
    ULONG        GenericULong;

	DBG_ENTER();

    SourceBuffer = &GenericULong;
    SourceBufferLength = sizeof(GenericULong);

    switch (Oid)
    {
    case OID_GEN_SUPPORTED_LIST:

        SourceBuffer =  (PVOID)ConfigManagerSupportedOidList;
        SourceBufferLength = sizeof(ConfigManagerSupportedOidList);
		status = NDIS_STATUS_SUCCESS;

        break;
    case OID_GEN_MAC_OPTIONS:

		status = NDIS_STATUS_NOT_SUPPORTED;

        break;
	case OID_GEN_MEDIA_CAPABILITIES:

		status = NDIS_STATUS_NOT_SUPPORTED;

		break;
    case OID_GEN_MEDIA_SUPPORTED:

		status = NDIS_STATUS_NOT_SUPPORTED;

        break;

    case OID_GEN_MEDIA_IN_USE:

		status = NDIS_STATUS_NOT_SUPPORTED;

        break;

    case OID_PGP_WIN32_IOCTL:

		SourceBuffer = (PVOID)NULL;
		SourceBufferLength = 0;
		status = NDIS_STATUS_SUCCESS;

        break;

	case OID_PGP_GET_SEND_PACKETS:

		GenericULong = adapter->SendPackets;

		status = NDIS_STATUS_SUCCESS;

		break;

	case OID_PGP_GET_RECEIVE_PACKETS:

		GenericULong = adapter->ReceivePackets;

		status = NDIS_STATUS_SUCCESS;

		break;

⌨️ 快捷键说明

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