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

📄 vpnmain.c

📁 pgp soucecode pgp soucecode
💻 C
字号:
#include "version.h"
#include "vpn.h"
#include "vpndbg.h"

//#if ( defined(DBG) && (DBG != 0)) || ( defined(DBG_MESSAGE) )

ULONG VpnDbgMask = DBG_DEBUG_ALL;

//#endif


NDIS_STATUS DriverEntry(
    IN PDRIVER_OBJECT DriverObject,
    IN PUNICODE_STRING RegistryPath
    );

NDIS_STRING DriverName = NDIS_STRING_CONST("PGPmac");
NDIS_STRING MSTCPName  = NDIS_STRING_CONST("MSTCP");

/*
 * Global handles.
 */
PGPNET_DRIVER PGPnetDriver = {0};


/*
 DriverEntry is the entrypoint when system load this driver. Besides it's 
 responsibility to register the various NDIS entrypoints, it's the right 
 place to do the initialization job of the Policy Manager.
 It's the Policy Manager's job to initialize the rest of the driver like
 IPSEC Engine (Encryption Engine).
 We might have to initialize the Configuration Manager here also.
 */

NDIS_STATUS DriverEntry(
    IN PDRIVER_OBJECT DriverObject,       
    IN PUNICODE_STRING RegistryPath
    )
{
    DBG_FUNC("DriverEntry")
    NDIS_STATUS status;
	
	DBG_ENTER();

#ifdef CHICAGO
	DBG_BREAK();
#endif


	DBG_PRINT(("pgpmac: Build Date: "__DATE__" Time: "__TIME__"\n"););	

    if (PGPnetDriver.NdisMacHandle)
    {
		// How could this happen? Would we ever come into this point?
		DBG_BREAK();
		DBG_LEAVE(NDIS_STATUS_SUCCESS);
        return (NDIS_STATUS_SUCCESS);
    }
    
#if ( defined(CHICAGO) && !defined(MEMPHIS) )
	if (PGPnetDriver.NdisProtocolHandle)
	{
		// OK, we have the protocolHandle but not the MacHandle
		// This means we are given a second chance to register
		// MacEntery

		status = MacDriverEntry(DriverObject, RegistryPath);
		DBG_LEAVE(status);
		return (status);

	}
#endif

    NdisZeroMemory(&PGPnetDriver, sizeof(PGPnetDriver));

    /*
     * Initialize NDIS wrapper.
     */
    NdisInitializeWrapper(&PGPnetDriver.NdisWrapperHandle,
                          DriverObject,
                          RegistryPath,
                          NULL
                          );

    /*
     * Initialize the protocol driver
     */
    status = ProtocolDriverEntry(DriverObject, RegistryPath);
    
#if ( !defined(CHICAGO) || defined(MEMPHIS) )
    if (status == NDIS_STATUS_SUCCESS)
    {
        /*
         * Initialize the MAC driver.
         */
        status = MacDriverEntry(DriverObject, RegistryPath);
    }
#endif

    if (status == NDIS_STATUS_SUCCESS)
    {
        /*
         * Intialize the rest of the VPN driver.
         */
        status = PolicyManagerInitialize(DriverObject,
                               RegistryPath,
                               &PGPnetDriver.PolicyManagerHandle
                               );
    }

    if (status == NDIS_STATUS_SUCCESS)
    {
        DBG_PRINT(("||||| Driver loaded successfully!\n"););
    }
    else
    {
        DriverUnload(&PGPnetDriver);
		NdisZeroMemory(&PGPnetDriver, sizeof(PGPnetDriver));

        status = STATUS_UNSUCCESSFUL;
    }

	DBG_LEAVE(status);
    return (status);
}


/*
 */

VOID DriverUnload(
    NDIS_HANDLE MacMacContext
    )
{
    DBG_FUNC("DriverUnload")

	DBG_ENTER();
    ASSERT(MacMacContext == &PGPnetDriver);

    if (PGPnetDriver.PolicyManagerHandle)
    {
        PolicyManagerUninitialize(PGPnetDriver.PolicyManagerHandle);
        PGPnetDriver.PolicyManagerHandle = NULL;
    }

    MacUnload(PGPnetDriver.NdisMacHandle);

    ProtocolUnload();
    
    if (PGPnetDriver.NdisWrapperHandle)
    {
        NdisTerminateWrapper(PGPnetDriver.NdisWrapperHandle, NULL);
        PGPnetDriver.NdisWrapperHandle = NULL;
    }

    DBG_LEAVE(0);
}

⌨️ 快捷键说明

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