.LALL ;***************************************************************************** ; ; (C) Copyright MICROSOFT Corp, 1995 ; ; Title: LANCELNK.ASM sourced from: ; Title: NDISLNK.ASM - Assembly linkage to NDIS Wrapper for MACs ; and Protocols ; ; Information in this document is Microsoft Confidential. ; Copyright (c) 1996, Microsoft Corporation, all rights reserve ; ; This document is provided for informational purposes only and Microsoft ; Corporation makes no warranties, either expressed or implied, in this document. ; Information in this document may be substantially changed without notice in ; subsequent versions of windows and does not represent a commitment on the ; part of Microsoft Corporation. This information is for internal use only for ; development purposes. ; ; Version: 3.00 ; ; Date: 05-Nov-1991 ; ;============================================================================= TITLE $LANCELNK .386P INCLUDE VMM.INC INCLUDE NETVXD.INC ; Net VxD initialization oredr ;INCLUDE NDIS.INC Dont have this so include the bit we need from the NDIS.H file. Begin_Service_Table Ndis Ndis_Service NdisGetVersion,LOCAL Ndis_Service NdisAllocateSpinLock,LOCAL Ndis_Service NdisFreeSpinLock,LOCAL Ndis_Service NdisAcquireSpinLock,LOCAL Ndis_Service NdisReleaseSpinLock,LOCAL Ndis_Service NdisOpenConfiguration,LOCAL Ndis_Service NdisReadConfiguration,LOCAL Ndis_Service NdisCloseConfiguration,LOCAL Ndis_Service NdisReadEisaSlotInformation, LOCAL Ndis_Service NdisReadMcaPosInformation,LOCAL Ndis_Service NdisAllocateMemory,LOCAL Ndis_Service NdisFreeMemory,LOCAL Ndis_Service NdisSetTimer,LOCAL Ndis_Service NdisCancelTimer,LOCAL Ndis_Service NdisStallExecution,LOCAL Ndis_Service NdisInitializeInterrupt,LOCAL Ndis_Service NdisRemoveInterrupt,LOCAL Ndis_Service NdisSynchronizeWithInterrupt,LOCAL Ndis_Service NdisOpenFile,LOCAL Ndis_Service NdisMapFile,LOCAL Ndis_Service NdisUnmapFile,LOCAL Ndis_Service NdisCloseFile,LOCAL Ndis_Service NdisAllocatePacketPool,LOCAL Ndis_Service NdisFreePacketPool,LOCAL Ndis_Service NdisAllocatePacket,LOCAL Ndis_Service NdisReinitializePacket,LOCAL Ndis_Service NdisFreePacket,LOCAL Ndis_Service NdisQueryPacket,LOCAL Ndis_Service NdisAllocateBufferPool,LOCAL Ndis_Service NdisFreeBufferPool,LOCAL Ndis_Service NdisAllocateBuffer,LOCAL Ndis_Service NdisCopyBuffer,LOCAL Ndis_Service NdisFreeBuffer,LOCAL Ndis_Service NdisQueryBuffer,LOCAL Ndis_Service NdisGetBufferPhysicalAddress,LOCAL Ndis_Service NdisChainBufferAtFront,LOCAL Ndis_Service NdisChainBufferAtBack,LOCAL Ndis_Service NdisUnchainBufferAtFront,LOCAL Ndis_Service NdisUnchainBufferAtBack,LOCAL Ndis_Service NdisGetNextBuffer,LOCAL Ndis_Service NdisCopyFromPacketToPacket,LOCAL Ndis_Service NdisRegisterProtocol,LOCAL Ndis_Service NdisDeregisterProtocol,LOCAL Ndis_Service NdisOpenAdapter,LOCAL Ndis_Service NdisCloseAdapter,LOCAL Ndis_Service NdisSend,LOCAL Ndis_Service NdisTransferData,LOCAL Ndis_Service NdisReset,LOCAL Ndis_Service NdisRequest,LOCAL Ndis_Service NdisInitializeWrapper,LOCAL Ndis_Service NdisTerminateWrapper,LOCAL Ndis_Service NdisRegisterMac,LOCAL Ndis_Service NdisDeregisterMac,LOCAL Ndis_Service NdisRegisterAdapter,LOCAL Ndis_Service NdisDeregisterAdapter,LOCAL Ndis_Service NdisCompleteOpenAdapter,LOCAL Ndis_Service NdisCompleteCloseAdapter,LOCAL Ndis_Service NdisCompleteSend,LOCAL Ndis_Service NdisCompleteTransferData,LOCAL Ndis_Service NdisCompleteReset,LOCAL Ndis_Service NdisCompleteRequest,LOCAL Ndis_Service NdisIndicateReceive,LOCAL Ndis_Service NdisIndicateReceiveComplete,LOCAL Ndis_Service NdisIndicateStatus,LOCAL Ndis_Service NdisIndicateStatusComplete,LOCAL Ndis_Service NdisCompleteQueryStatistics,LOCAL Ndis_Service NdisEqualString,LOCAL Ndis_Service NdisRegAdaptShutdown,LOCAL Ndis_Service NdisReadNetworkAddress,LOCAL Ndis_Service NdisWriteErrorLogEntry,LOCAL Ndis_Service NdisMapIoSpace,LOCAL Ndis_Service NdisDeregAdaptShutdown,LOCAL Ndis_Service NdisAllocateSharedMemory,LOCAL Ndis_Service NdisFreeSharedMemory, LOCAL Ndis_Service NdisAllocateDmaChannel, LOCAL Ndis_Service NdisSetupDmaTransfer, LOCAL Ndis_Service NdisCompleteDmaTransfer, LOCAL Ndis_Service NdisReadDmaCounter, LOCAL Ndis_Service NdisFreeDmaChannel, LOCAL Ndis_Service NdisReleaseAdapterResources, LOCAL Ndis_Service NdisQueryGlobalStatistics, LOCAL Ndis_Service NdisOpenProtocolConfiguration, LOCAL Ndis_Service NdisCompleteBindAdapter, LOCAL Ndis_Service NdisCompleteUnbindAdapter, LOCAL Ndis_Service WrapperStartNet, LOCAL Ndis_Service WrapperGetComponentList, LOCAL Ndis_Service WrapperQueryAdapterResources, Local Ndis_Service WrapperDelayBinding, Local Ndis_Service WrapperResumeBinding, Local Ndis_Service WrapperRemoveChildren, Local Ndis_Service NdisImmediateReadPciSlotInformation, Local Ndis_Service NdisImmediateWritePciSlotInformation, Local Ndis_Service NdisReadPciSlotInformation, Local Ndis_Service NdisWritePciSlotInformation, Local Ndis_Service NdisPciAssignResources, Local Ndis_Service NdisQueryBufferOffset, Local End_Service_Table Ndis NDIS_STATUS_SUCCESS EQU 0 ; the following equate makes the VXD dynamically loadable. DEVICE_DYNAMIC EQU 1 DECLARE_VIRTUAL_DEVICE %DEVICE, 3, 10, <%DEVICE>_Control, Undefined_Device_Id, PROTOCOL_Init_Order VxD_LOCKED_DATA_SEG Public bInitAlready bInitAlready DB 0 VxD_LOCKED_DATA_ENDS VxD_LOCKED_CODE_SEG BeginProc C_Device_Init IFDEF NDIS_STDCALL extern _DriverEntry@8:NEAR ELSE extern _DriverEntry:NEAR ENDIF mov al, bInitAlready cmp al, 0 ; Make sure we' haven't been called already. jnz Succeed_Init_Phase inc bInitAlready ; Set the "Called Already" Flag ; Make sure the wrapper (Ndis.386) is loaded VxDcall NdisGetVersion jc Fail_Init_Phase push 0 push 0 IFDEF NDIS_STDCALL call _DriverEntry@8 ELSE call _DriverEntry add esp,8 ENDIF cmp eax, NDIS_STATUS_SUCCESS jne Fail_Init_Phase Succeed_Init_Phase: clc ret Fail_Init_Phase: stc ret EndProc C_Device_Init Begin_Control_Dispatch %DEVICE Control_Dispatch Sys_Dynamic_Device_Init, C_Device_Init Control_Dispatch W32_DEVICEIOCONTROL, PacketIOControl, sCall, ; Control_Dispatch DEBUG_QUERY, PacketDebugQuery, sCall End_Control_Dispatch %DEVICE VxD_LOCKED_CODE_ENDS ;****************************************************************************** ; R E A L M O D E I N I T C O D E ;****************************************************************************** ;****************************************************************************** ; ; MAC_Real_Init ; ; DESCRIPTION: ; ; ENTRY: ; ; EXIT: ; ; USES: ; ;============================================================================== VxD_REAL_INIT_SEG BeginProc MAC_Real_Init ; ; If another us is loaded then don't load -- Just abort our load ; test bx, Duplicate_From_INT2F OR Duplicate_Device_ID jnz SHORT Ndis_RI_Abort_Load ; No other is loaded. xor bx, bx xor si, si mov ax, Device_Load_Ok ret Ndis_RI_Abort_Load: xor bx, bx xor si, si mov ax, Abort_Device_Load ret EndProc MAC_Real_Init VxD_REAL_INIT_ENDS END MAC_Real_Init