BOOL Initialize() { BOOL Res = TRUE; //CKl_Reg Reg; /* if ( KL_SUCCESS == Reg.OpenKey(L"\\registry\\machine\\system\\CurrentControlSet\\Services\\VxD\\KL1") ) { wchar_t Buffer[100]; ULONG Size = sizeof ( Buffer ); ULONG Type = REG_SZ; wchar_t Name[100]; ULONG NameSize = sizeof ( Name ); Reg.CreateSubKey(L"SubKey"); Reg.EnumValues(2, (PWCHAR)Name, &NameSize ); Reg.QueryValue(L"TraceFile", &Type, Buffer, &Size ); Reg.CloseKey(); } */ // NdisInitializeWrapper(&WrapperHandle, NULL, NULL, NULL ); //if ( isWinME() ) { isWin98 = TRUE; } AllocateSpinLock( &g_PCP_Lock ); Res = HookNdis(); return Res; }
NTSTATUS DriverEntry ( PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryString ) /*++ Routine Description: Diver entry point. Initializes global variables and complete hook operation. Arguments: DriverObject - A pointer to this driver, provided by system. RegistryString - A pointer to register path used by this driver, provided by system. Return Value: Returns corresponding NTSTATUS to indicate success or failure. Author: xiaonie 2012/07/12 --*/ { NTSTATUS status; DbgPrint("NDIS Hook ------ start!\r\n"); // check os version if (OS_VERSION_XP != GetOsVersion()) { DbgPrint("Only XP supported!\r\n"); return STATUS_UNSUCCESSFUL; } // setup unload routine for this driver DriverObject->DriverUnload = OnUnload; // init global viaribles. KeInitializeSpinLock(&g_lock); InitializeListHead(&g_linkListHead); NdisAllocatePacketPool(&status,&g_PacketPool, 0x1000, PROTOCOL_RESERVED_SIZE_IN_PACKET); if (status != NDIS_STATUS_SUCCESS/* || g_PacketPool == NULL*/) { DbgPrint("alloc packet pool failed!\r\n"); return status; } NdisAllocateBufferPool(&status, &g_BufferPool, 0x10); if(status != NDIS_STATUS_SUCCESS/* || g_BufferPool == NULL*/) { DbgPrint("alloc buffer pool failed!\r\n"); NdisFreePacketPool(g_PacketPool); return status; } // hook nids routines status = HookNdis(); if (!NT_SUCCESS(status)) { DbgPrint("HookNdis failed!\r\n"); NdisFreeBufferPool(g_BufferPool); NdisFreePacketPool(g_PacketPool); } return status; }