diff --git a/reactos/drivers/network/ndis/ndis.rbuild b/reactos/drivers/network/ndis/ndis.rbuild
index 0a71cd309e3..4044d76b036 100644
--- a/reactos/drivers/network/ndis/ndis.rbuild
+++ b/reactos/drivers/network/ndis/ndis.rbuild
@@ -18,8 +18,9 @@
ndissys.h
- 40gone.c
- 50gone.c
+ 30stubs.c
+ 40stubs.c
+ 50stubs.c
buffer.c
cl.c
cm.c
@@ -32,9 +33,9 @@
main.c
memory.c
miniport.c
+ misc.c
protocol.c
string.c
- stubs.c
time.c
ndis.rc
diff --git a/reactos/drivers/network/ndis/ndis/40gone.c b/reactos/drivers/network/ndis/ndis/30stubs.c
similarity index 82%
rename from reactos/drivers/network/ndis/ndis/40gone.c
rename to reactos/drivers/network/ndis/ndis/30stubs.c
index 7d5b9666cb7..d217ec4008d 100644
--- a/reactos/drivers/network/ndis/ndis/40gone.c
+++ b/reactos/drivers/network/ndis/ndis/30stubs.c
@@ -1,8 +1,8 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS NDIS library
- * FILE: ndis/40gone.c
- * PURPOSE: Obsoleted functions in NDIS 4.0
+ * FILE: ndis/30stubs.c
+ * PURPOSE: NDIS 3.0 Stubs
* PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
* REVISIONS:
* CSH 01/08-2000 Created
@@ -102,27 +102,6 @@ NdisAllocateDmaChannel(
UNIMPLEMENTED
}
-
-/*
- * @implemented
- */
-VOID
-EXPORT
-NdisAllocateSharedMemory(
- IN NDIS_HANDLE NdisAdapterHandle,
- IN ULONG Length,
- IN BOOLEAN Cached,
- OUT PVOID *VirtualAddress,
- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress)
-{
- NdisMAllocateSharedMemory(NdisAdapterHandle,
- Length,
- Cached,
- VirtualAddress,
- PhysicalAddress);
-}
-
-
/*
* @unimplemented
*/
diff --git a/reactos/drivers/network/ndis/ndis/50gone.c b/reactos/drivers/network/ndis/ndis/40stubs.c
similarity index 72%
rename from reactos/drivers/network/ndis/ndis/50gone.c
rename to reactos/drivers/network/ndis/ndis/40stubs.c
index 21818580fed..0057b6018e3 100644
--- a/reactos/drivers/network/ndis/ndis/50gone.c
+++ b/reactos/drivers/network/ndis/ndis/40stubs.c
@@ -1,8 +1,8 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS NDIS library
- * FILE: ndis/50gone.c
- * PURPOSE: Obsoleted functions in NDIS 5.0
+ * FILE: ndis/40stubs.c
+ * PURPOSE: NDIS 4.0 stubs
* PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
* REVISIONS:
* CSH 01/08-2000 Created
@@ -70,24 +70,6 @@ NdisDeregisterAdapter(
}
-/*
- * @implemented
- */
-VOID
-EXPORT
-NdisDeregisterAdapterShutdownHandler(
- IN NDIS_HANDLE NdisAdapterHandle)
-/*
- * FUNCTION:
- * ARGUMENTS:
- * NOTES:
- * NDIS 4.0
- */
-{
- NdisMDeregisterAdapterShutdownHandler(NdisAdapterHandle);
-}
-
-
/*
* @unimplemented
*/
@@ -125,32 +107,6 @@ NdisFreeDmaChannel(
}
-/*
- * @implemented
- */
-VOID
-EXPORT
-NdisFreeSharedMemory(
- IN NDIS_HANDLE NdisAdapterHandle,
- IN ULONG Length,
- IN BOOLEAN Cached,
- IN PVOID VirtualAddress,
- IN NDIS_PHYSICAL_ADDRESS PhysicalAddress)
-/*
- * FUNCTION:
- * ARGUMENTS:
- * NOTES:
- * NDIS 4.0
- */
-{
- NdisMFreeSharedMemory(NdisAdapterHandle,
- Length,
- Cached,
- VirtualAddress,
- PhysicalAddress);
-}
-
-
/*
* @unimplemented
*/
@@ -213,31 +169,6 @@ NdisIMSwitchToMiniport(
}
-/*
- * @implemented
- */
-VOID
-EXPORT
-NdisMapIoSpace(
- OUT PNDIS_STATUS Status,
- OUT PVOID *VirtualAddress,
- IN NDIS_HANDLE NdisAdapterHandle,
- IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
- IN UINT Length)
-/*
- * FUNCTION:
- * ARGUMENTS:
- * NOTES:
- * NDIS 4.0
- */
-{
- *Status = NdisMMapIoSpace(VirtualAddress,
- NdisAdapterHandle,
- PhysicalAddress,
- Length);
-}
-
-
/*
* @unimplemented
*/
@@ -330,28 +261,6 @@ NdisRegisterAdapter(
}
-/*
- * @implemented
- */
-VOID
-EXPORT
-NdisRegisterAdapterShutdownHandler(
- IN NDIS_HANDLE NdisAdapterHandle,
- IN PVOID ShutdownContext,
- IN ADAPTER_SHUTDOWN_HANDLER ShutdownHandler)
-/*
- * FUNCTION:
- * ARGUMENTS:
- * NOTES:
- * NDIS 4.0
- */
-{
- NdisMRegisterAdapterShutdownHandler(NdisAdapterHandle,
- ShutdownContext,
- ShutdownHandler);
-}
-
-
/*
* @unimplemented
*/
@@ -414,4 +323,66 @@ NdisUpdateSharedMemory(
/* No-op. */
}
+
+/*
+ * @unimplemented
+ */
+VOID
+EXPORT
+NdisImmediateReadSharedMemory(
+ IN NDIS_HANDLE WrapperConfigurationContext,
+ IN ULONG SharedMemoryAddress,
+ OUT PUCHAR Buffer,
+ IN ULONG Length)
+{
+ UNIMPLEMENTED
+}
+
+
+/*
+ * @unimplemented
+ */
+VOID
+EXPORT
+NdisImmediateWriteSharedMemory(
+ IN NDIS_HANDLE WrapperConfigurationContext,
+ IN ULONG SharedMemoryAddress,
+ IN PUCHAR Buffer,
+ IN ULONG Length)
+{
+ UNIMPLEMENTED
+}
+
+
+
+/*
+ * @unimplemented
+ */
+VOID
+EXPORT
+NdisReadEisaSlotInformation(
+ OUT PNDIS_STATUS Status,
+ IN NDIS_HANDLE WrapperConfigurationContext,
+ OUT PUINT SlotNumber,
+ OUT PNDIS_EISA_FUNCTION_INFORMATION EisaData)
+{
+ UNIMPLEMENTED
+}
+
+
+/*
+ * @unimplemented
+ */
+VOID
+EXPORT
+NdisReadEisaSlotInformationEx(
+ OUT PNDIS_STATUS Status,
+ IN NDIS_HANDLE WrapperConfigurationContext,
+ OUT PUINT SlotNumber,
+ OUT PNDIS_EISA_FUNCTION_INFORMATION *EisaData,
+ OUT PUINT NumberOfFunctions)
+{
+ UNIMPLEMENTED
+}
+
/* EOF */
diff --git a/reactos/drivers/network/ndis/ndis/stubs.c b/reactos/drivers/network/ndis/ndis/50stubs.c
similarity index 52%
rename from reactos/drivers/network/ndis/ndis/stubs.c
rename to reactos/drivers/network/ndis/ndis/50stubs.c
index 35572ad89ea..8e283579dc3 100644
--- a/reactos/drivers/network/ndis/ndis/stubs.c
+++ b/reactos/drivers/network/ndis/ndis/50stubs.c
@@ -1,8 +1,8 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS NDIS library
- * FILE: ndis/stubs.c
- * PURPOSE: Stubs
+ * FILE: ndis/50stubs.c
+ * PURPOSE: NDIS 5.0 Stubs
* PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
* REVISIONS:
* CSH 01/08-2000 Created
@@ -24,147 +24,6 @@ NdisCompleteQueryStatistics(
}
-/*
- * @implemented
- */
-#undef NdisInterlockedAddUlong
-VOID
-EXPORT
-NdisInterlockedAddUlong (
- IN PULONG Addend,
- IN ULONG Increment,
- IN PNDIS_SPIN_LOCK SpinLock)
-{
- ExInterlockedAddUlong ( Addend, Increment, (PKSPIN_LOCK)SpinLock );
-}
-
-
-/*
- * @implemented
- */
-#undef NdisInterlockedInsertHeadList
-PLIST_ENTRY
-EXPORT
-NdisInterlockedInsertHeadList(
- IN PLIST_ENTRY ListHead,
- IN PLIST_ENTRY ListEntry,
- IN PNDIS_SPIN_LOCK SpinLock)
-{
- return ExInterlockedInsertHeadList ( ListHead, ListEntry, (PKSPIN_LOCK)SpinLock );
-}
-
-
-/*
- * @implemented
- */
-#undef NdisInterlockedInsertTailList
-PLIST_ENTRY
-EXPORT
-NdisInterlockedInsertTailList(
- IN PLIST_ENTRY ListHead,
- IN PLIST_ENTRY ListEntry,
- IN PNDIS_SPIN_LOCK SpinLock)
-{
- return ExInterlockedInsertTailList ( ListHead, ListEntry, (PKSPIN_LOCK)SpinLock );
-}
-
-
-/*
- * @implemented
- */
-#undef NdisInterlockedRemoveHeadList
-PLIST_ENTRY
-EXPORT
-NdisInterlockedRemoveHeadList(
- IN PLIST_ENTRY ListHead,
- IN PNDIS_SPIN_LOCK SpinLock)
-{
- return ExInterlockedRemoveHeadList ( ListHead, (PKSPIN_LOCK)SpinLock );
-}
-
-typedef struct _NDIS_HANDLE_OBJECT
-{
- HANDLE FileHandle;
- BOOLEAN Mapped;
- ULONG FileLength;
- PVOID MapBuffer;
-} NDIS_HANDLE_OBJECT, *PNDIS_HANDLE_OBJECT;
-
-__inline
-PNDIS_HANDLE_OBJECT
-NDIS_HANDLE_TO_POBJECT ( NDIS_HANDLE handle )
-{
- return (PNDIS_HANDLE_OBJECT)handle;
-}
-
-__inline
-NDIS_HANDLE
-NDIS_POBJECT_TO_HANDLE ( PNDIS_HANDLE_OBJECT obj )
-{
- return (NDIS_HANDLE)obj;
-}
-
-const WCHAR* NDIS_FILE_FOLDER = L"\\SystemRoot\\System32\\Drivers\\";
-
-/*
- * @implemented
- */
-VOID
-EXPORT
-NdisMapFile(
- OUT PNDIS_STATUS Status,
- OUT PVOID *MappedBuffer,
- IN NDIS_HANDLE FileHandle)
-{
- PNDIS_HANDLE_OBJECT HandleObject = (PNDIS_HANDLE_OBJECT) FileHandle;
-
- NDIS_DbgPrint(MAX_TRACE, ("called: FileHandle 0x%x\n", FileHandle));
-
- if (HandleObject->Mapped)
- {
- /* If a file already mapped we will return an error code */
- *Status = NDIS_STATUS_ALREADY_MAPPED;
- return;
- }
-
- HandleObject->Mapped = TRUE;
- *MappedBuffer = HandleObject->MapBuffer;
-
- /* Set returned status */
- *Status = STATUS_SUCCESS;
-}
-
-/*
- * @implemented
- */
-VOID
-EXPORT
-NdisCloseFile(
- IN NDIS_HANDLE FileHandle)
-{
- PNDIS_HANDLE_OBJECT FileHandleObject;
-
- ASSERT_IRQL(PASSIVE_LEVEL);
-
- ASSERT ( FileHandle );
-
- FileHandleObject = NDIS_HANDLE_TO_POBJECT(FileHandle);
-
- ASSERT ( FileHandleObject->FileHandle );
-
- /*
- if ( FileHandleObject->Mapped )
- NdisUnmapFile ( FileHandle );
- */
-
- ZwClose ( FileHandleObject->FileHandle );
-
- memset ( FileHandleObject, 0, sizeof(NDIS_HANDLE_OBJECT) );
-
- ExFreePool ( FileHandleObject );
-}
-
-
/*
* @unimplemented
*/
@@ -257,101 +116,6 @@ NdisMWanSendComplete(
}
-/*
- * @unimplemented
- */
-VOID
-EXPORT
-NdisOpenFile(
- OUT PNDIS_STATUS Status,
- OUT PNDIS_HANDLE FileHandle,
- OUT PUINT FileLength,
- IN PNDIS_STRING FileName,
- IN NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress)
-{
- NDIS_STRING FullFileName;
- OBJECT_ATTRIBUTES ObjectAttributes;
- PNDIS_HANDLE_OBJECT FileHandleObject = NULL;
- IO_STATUS_BLOCK IoStatusBlock;
-
- ASSERT_IRQL(PASSIVE_LEVEL);
-
- *Status = NDIS_STATUS_SUCCESS;
- FullFileName.Buffer = NULL;
-
- ASSERT ( Status && FileName );
-
- FullFileName.Length = sizeof(NDIS_FILE_FOLDER);
- FullFileName.MaximumLength = FileName->MaximumLength + sizeof(NDIS_FILE_FOLDER);
- FullFileName.Buffer = ExAllocatePool ( NonPagedPool, FullFileName.MaximumLength );
-
- if ( !FullFileName.Buffer )
- {
- *Status = NDIS_STATUS_RESOURCES;
- goto cleanup;
- }
-
- FileHandleObject = ExAllocatePool ( NonPagedPool, sizeof(NDIS_HANDLE_OBJECT) );
- if ( !FileHandleObject )
- {
- *Status = NDIS_STATUS_RESOURCES;
- goto cleanup;
- }
- memset ( FileHandleObject, 0, sizeof(NDIS_HANDLE_OBJECT) );
-
- memmove ( FullFileName.Buffer, NDIS_FILE_FOLDER, FullFileName.Length );
- *Status = RtlAppendUnicodeStringToString ( &FullFileName, FileName );
- if ( !NT_SUCCESS(*Status) )
- {
- *Status = NDIS_STATUS_FAILURE;
- goto cleanup;
- }
-
- InitializeObjectAttributes ( &ObjectAttributes,
- &FullFileName,
- OBJ_CASE_INSENSITIVE,
- NULL,
- NULL );
-
- *Status = ZwCreateFile (
- &FileHandleObject->FileHandle,
- FILE_READ_DATA|SYNCHRONIZE,
- &ObjectAttributes,
- &IoStatusBlock,
- NULL, // PLARGE_INTEGER AllocationSize
- 0, // ULONG FileAttributes
- FILE_SHARE_READ, // ULONG ShareAccess
- FILE_CREATE, // ULONG CreateDisposition
- FILE_SYNCHRONOUS_IO_NONALERT, // ULONG CreateOptions
- 0, // PVOID EaBuffer
- 0 ); // ULONG EaLength
-
- if ( !NT_SUCCESS(*Status) )
- {
- *Status = NDIS_STATUS_FAILURE;
- }
-
-cleanup:
- if ( FullFileName.Buffer != NULL )
- {
- ExFreePool ( FullFileName.Buffer );
- FullFileName.Buffer = NULL;
- }
- if ( !NT_SUCCESS(*Status) )
- {
- if( FileHandleObject ) {
- ExFreePool ( FileHandleObject );
- FileHandleObject = NULL;
- }
- *FileHandle = NULL;
- }
- else
- *FileHandle = NDIS_POBJECT_TO_HANDLE(FileHandleObject);
-
- return;
-}
-
-
/*
NdisOpenGlobalConfiguration
*/
@@ -390,32 +154,6 @@ NdisSetProtocolFilter(
#endif
-/*
- * @implemented
- */
-CCHAR
-EXPORT
-NdisSystemProcessorCount(
- VOID)
-{
- return (CCHAR)KeNumberProcessors;
-}
-
-
-/*
- * @implemented
- */
-VOID
-EXPORT
-NdisUnmapFile(
- IN NDIS_HANDLE FileHandle)
-{
- PNDIS_HANDLE_OBJECT HandleObject = (PNDIS_HANDLE_OBJECT) FileHandle;
-
- HandleObject->Mapped = FALSE;
-}
-
-
/*
NdisUpcaseUnicodeString
NdisUpdateSharedMemory@4
@@ -427,9 +165,6 @@ NdisWriteEventLogEntry
*/
-
-/* NDIS 5.0 extensions */
-
/*
* @unimplemented
*/
@@ -470,53 +205,6 @@ NdisConvertStringToAtmAddress(
}
-/*
- * @implemented
- */
-VOID
-EXPORT
-NdisGetCurrentProcessorCounts(
- OUT PULONG pIdleCount,
- OUT PULONG pKernelAndUser,
- OUT PULONG pIndex)
-/*
- * FUNCTION:
- * ARGUMENTS:
- * NOTES:
- * NDIS 5.0
- */
-{
- ExGetCurrentProcessorCounts( (PULONG) pIdleCount, (PULONG) pKernelAndUser, (PULONG) pIndex);
-}
-
-
-/*
- * @implemented
- */
-VOID
-EXPORT
-NdisGetDriverHandle(
- IN PNDIS_HANDLE NdisBindingHandle,
- OUT PNDIS_HANDLE NdisDriverHandle)
-/*
- * FUNCTION:
- * ARGUMENTS:
- * NOTES:
- * NDIS 5.0
- */
-{
- PADAPTER_BINDING Binding = (PADAPTER_BINDING)NdisBindingHandle;
-
- if (!Binding)
- {
- *NdisDriverHandle = NULL;
- return;
- }
-
- *NdisDriverHandle = Binding->Adapter->NdisMiniportBlock.DriverHandle;
-}
-
-
/*
* @unimplemented
*/
@@ -538,106 +226,6 @@ NdisGetReceivedPacket(
}
-/*
- * @implemented
- */
-VOID
-EXPORT
-NdisGetSystemUpTime(OUT PULONG pSystemUpTime)
-{
- ULONG Increment;
- LARGE_INTEGER TickCount;
-
- /* Get the increment and current tick count */
- Increment = KeQueryTimeIncrement();
- KeQueryTickCount(&TickCount);
-
- /* Convert to milliseconds and return */
- TickCount.QuadPart *= Increment;
- TickCount.QuadPart /= (10 * 1000);
- *pSystemUpTime = TickCount.LowPart;
-}
-
-
-/*
- * @implemented
- */
-#undef NdisInterlockedDecrement
-LONG
-EXPORT
-NdisInterlockedDecrement(
- IN PLONG Addend)
-/*
- * FUNCTION:
- * ARGUMENTS:
- * NOTES:
- * NDIS 5.0
- */
-{
- return InterlockedDecrement ( Addend );
-}
-
-
-/*
- * @implemented
- */
-#undef NdisInterlockedIncrement
-LONG
-EXPORT
-NdisInterlockedIncrement(
- IN PLONG Addend)
-/*
- * FUNCTION:
- * ARGUMENTS:
- * NOTES:
- * NDIS 5.0
- */
-{
- return InterlockedIncrement ( Addend );
-}
-
-
-/*
- * @implemented
- */
-#undef NdisInterlockedPopEntrySList
-PSINGLE_LIST_ENTRY
-EXPORT
-NdisInterlockedPopEntrySList(
- IN PSLIST_HEADER ListHead,
- IN PKSPIN_LOCK Lock)
-/*
- * FUNCTION:
- * ARGUMENTS:
- * NOTES:
- * NDIS 5.0
- */
-{
- return ExInterlockedPopEntrySList ( ListHead, Lock );
-}
-
-
-/*
- * @implemented
- */
-#undef NdisInterlockedPushEntrySList
-PSINGLE_LIST_ENTRY
-EXPORT
-NdisInterlockedPushEntrySList(
- IN PSLIST_HEADER ListHead,
- IN PSINGLE_LIST_ENTRY ListEntry,
- IN PKSPIN_LOCK Lock)
-/*
- * FUNCTION:
- * ARGUMENTS:
- * NOTES:
- * NDIS 5.0
- */
-{
- return ExInterlockedPushEntrySList ( ListHead, ListEntry, Lock );
-}
-
-
/*
* @unimplemented
*/
@@ -854,8 +442,6 @@ NdisWritePcmciaAttributeMemory(
}
-/* NDIS 5.0 extensions for intermediate drivers */
-
/*
* @unimplemented
*/
@@ -1014,22 +600,123 @@ NdisIMInitializeDeviceInstanceEx(
}
-
+/*
+ * @unimplemented
+ */
VOID
-NTAPI
-ndisProcWorkItemHandler(PVOID pContext)
+EXPORT
+NdisReturnPackets(
+ IN PNDIS_PACKET *PacketsToReturn,
+ IN UINT NumberOfPackets)
+/*
+ * FUNCTION: Releases ownership of one or more packets
+ * ARGUMENTS:
+ * PacketsToReturn = Pointer to an array of pointers to packet descriptors
+ * NumberOfPackets = Number of pointers in descriptor pointer array
+ */
{
- PNDIS_WORK_ITEM pNdisItem = (PNDIS_WORK_ITEM)pContext;
- pNdisItem->Routine(pNdisItem, pNdisItem->Context);
+ UNIMPLEMENTED
}
+
+/*
+ * @unimplemented
+ */
+UINT
EXPORT
-NDIS_STATUS
-NdisScheduleWorkItem(
- IN PNDIS_WORK_ITEM pWorkItem)
+NdisPacketPoolUsage(
+ IN NDIS_HANDLE PoolHandle)
+/*
+ * FUNCTION:
+ * ARGUMENTS:
+ * NOTES:
+ * NDIS 5.0
+ */
{
- PWORK_QUEUE_ITEM pntWorkItem = (PWORK_QUEUE_ITEM)pWorkItem->WrapperReserved;
- ExInitializeWorkItem(pntWorkItem, ndisProcWorkItemHandler, pWorkItem);
- ExQueueWorkItem(pntWorkItem, CriticalWorkQueue);
- return NDIS_STATUS_SUCCESS;
+ UNIMPLEMENTED
+
+ return 0;
+}
+
+
+/*
+ * @unimplemented
+ */
+VOID
+EXPORT
+NdisMDeregisterIoPortRange(
+ IN NDIS_HANDLE MiniportAdapterHandle,
+ IN UINT InitialPort,
+ IN UINT NumberOfPorts,
+ IN PVOID PortOffset)
+/*
+ * FUNCTION: Releases a register mapping to I/O ports
+ * ARGUMENTS:
+ * MiniportAdapterHandle = Specifies handle input to MiniportInitialize
+ * InitialPort = Bus-relative base port address of a range to be mapped
+ * NumberOfPorts = Specifies number of ports to be mapped
+ * PortOffset = Pointer to mapped base port address
+ */
+{
+ UNIMPLEMENTED
+}
+
+
+/*
+ * @unimplemented
+ */
+NDIS_STATUS
+EXPORT
+NdisMAllocateSharedMemoryAsync(
+ IN NDIS_HANDLE MiniportAdapterHandle,
+ IN ULONG Length,
+ IN BOOLEAN Cached,
+ IN PVOID Context)
+{
+ UNIMPLEMENTED
+
+ return NDIS_STATUS_FAILURE;
+}
+
+/*
+ * @unimplemented
+ */
+VOID
+EXPORT
+NdisCopyBuffer(
+ OUT PNDIS_STATUS Status,
+ OUT PNDIS_BUFFER *Buffer,
+ IN NDIS_HANDLE PoolHandle,
+ IN PVOID MemoryDescriptor,
+ IN UINT Offset,
+ IN UINT Length)
+/*
+ * FUNCTION: Returns a new buffer descriptor for a (partial) buffer
+ * ARGUMENTS:
+ * Status = Address of a buffer to place status of operation
+ * Buffer = Address of a buffer to place new buffer descriptor
+ * PoolHandle = Handle returned by NdisAllocateBufferPool
+ * MemoryDescriptor = Pointer to a memory descriptor (possibly NDIS_BUFFER)
+ * Offset = Offset in buffer to start copying
+ * Length = Number of bytes to copy
+ */
+{
+ *Status = NDIS_STATUS_FAILURE;
+}
+
+
+/*
+ * @unimplemented
+ */
+VOID
+EXPORT
+NdisGetCurrentProcessorCpuUsage(
+ PULONG pCpuUsage)
+/*
+ * FUNCTION: Returns how busy the current processor is as a percentage
+ * ARGUMENTS:
+ * pCpuUsage = Pointer to a buffer to place CPU usage
+ */
+{
+ UNIMPLEMENTED
}
diff --git a/reactos/drivers/network/ndis/ndis/buffer.c b/reactos/drivers/network/ndis/ndis/buffer.c
index a690bf862aa..e5caccee517 100644
--- a/reactos/drivers/network/ndis/ndis/buffer.c
+++ b/reactos/drivers/network/ndis/ndis/buffer.c
@@ -581,33 +581,6 @@ NdisBufferVirtualAddress(
}
-/*
- * @unimplemented
- */
-VOID
-EXPORT
-NdisCopyBuffer(
- OUT PNDIS_STATUS Status,
- OUT PNDIS_BUFFER *Buffer,
- IN NDIS_HANDLE PoolHandle,
- IN PVOID MemoryDescriptor,
- IN UINT Offset,
- IN UINT Length)
-/*
- * FUNCTION: Returns a new buffer descriptor for a (partial) buffer
- * ARGUMENTS:
- * Status = Address of a buffer to place status of operation
- * Buffer = Address of a buffer to place new buffer descriptor
- * PoolHandle = Handle returned by NdisAllocateBufferPool
- * MemoryDescriptor = Pointer to a memory descriptor (possibly NDIS_BUFFER)
- * Offset = Offset in buffer to start copying
- * Length = Number of bytes to copy
- */
-{
- *Status = NDIS_STATUS_FAILURE;
-}
-
-
/*
* @implemented
*/
@@ -975,45 +948,6 @@ NdisGetFirstBufferFromPacket(
}
-/*
- * @unimplemented
- */
-VOID
-EXPORT
-NdisReturnPackets(
- IN PNDIS_PACKET *PacketsToReturn,
- IN UINT NumberOfPackets)
-/*
- * FUNCTION: Releases ownership of one or more packets
- * ARGUMENTS:
- * PacketsToReturn = Pointer to an array of pointers to packet descriptors
- * NumberOfPackets = Number of pointers in descriptor pointer array
- */
-{
- UNIMPLEMENTED
-}
-
-
-/*
- * @unimplemented
- */
-UINT
-EXPORT
-NdisPacketPoolUsage(
- IN NDIS_HANDLE PoolHandle)
-/*
- * FUNCTION:
- * ARGUMENTS:
- * NOTES:
- * NDIS 5.0
- */
-{
- UNIMPLEMENTED
-
- return 0;
-}
-
-
/*
* @implemented
*/
diff --git a/reactos/drivers/network/ndis/ndis/control.c b/reactos/drivers/network/ndis/ndis/control.c
index 50139895ecd..e95b29e6a80 100644
--- a/reactos/drivers/network/ndis/ndis/control.c
+++ b/reactos/drivers/network/ndis/ndis/control.c
@@ -218,23 +218,6 @@ NdisFreeSpinLock(
/* Nothing to do here! */
}
-
-/*
- * @unimplemented
- */
-VOID
-EXPORT
-NdisGetCurrentProcessorCpuUsage(
- PULONG pCpuUsage)
-/*
- * FUNCTION: Returns how busy the current processor is as a percentage
- * ARGUMENTS:
- * pCpuUsage = Pointer to a buffer to place CPU usage
- */
-{
- UNIMPLEMENTED
-}
-
/*
* @implemented
diff --git a/reactos/drivers/network/ndis/ndis/hardware.c b/reactos/drivers/network/ndis/ndis/hardware.c
index ff2a3bef864..f711f2a38ac 100644
--- a/reactos/drivers/network/ndis/ndis/hardware.c
+++ b/reactos/drivers/network/ndis/ndis/hardware.c
@@ -152,37 +152,6 @@ NdisQueryMapRegisterCount(
return NDIS_STATUS_NOT_SUPPORTED;
}
-
-/*
- * @unimplemented
- */
-VOID
-EXPORT
-NdisReadEisaSlotInformation(
- OUT PNDIS_STATUS Status,
- IN NDIS_HANDLE WrapperConfigurationContext,
- OUT PUINT SlotNumber,
- OUT PNDIS_EISA_FUNCTION_INFORMATION EisaData)
-{
- UNIMPLEMENTED
-}
-
-
-/*
- * @unimplemented
- */
-VOID
-EXPORT
-NdisReadEisaSlotInformationEx(
- OUT PNDIS_STATUS Status,
- IN NDIS_HANDLE WrapperConfigurationContext,
- OUT PUINT SlotNumber,
- OUT PNDIS_EISA_FUNCTION_INFORMATION *EisaData,
- OUT PUINT NumberOfFunctions)
-{
- UNIMPLEMENTED
-}
-
/*
* @implemented
diff --git a/reactos/drivers/network/ndis/ndis/io.c b/reactos/drivers/network/ndis/ndis/io.c
index e658f5a0647..1a99a67411d 100644
--- a/reactos/drivers/network/ndis/ndis/io.c
+++ b/reactos/drivers/network/ndis/ndis/io.c
@@ -525,29 +525,6 @@ NdisMDeregisterInterrupt(
Interrupt->Miniport->Interrupt = NULL;
}
-
-/*
- * @unimplemented
- */
-VOID
-EXPORT
-NdisMDeregisterIoPortRange(
- IN NDIS_HANDLE MiniportAdapterHandle,
- IN UINT InitialPort,
- IN UINT NumberOfPorts,
- IN PVOID PortOffset)
-/*
- * FUNCTION: Releases a register mapping to I/O ports
- * ARGUMENTS:
- * MiniportAdapterHandle = Specifies handle input to MiniportInitialize
- * InitialPort = Bus-relative base port address of a range to be mapped
- * NumberOfPorts = Specifies number of ports to be mapped
- * PortOffset = Pointer to mapped base port address
- */
-{
- NDIS_DbgPrint(MAX_TRACE, ("called - IMPLEMENT ME.\n"));
-}
-
/*
* @implemented
@@ -971,5 +948,31 @@ NdisMInitializeScatterGatherDma(
return NDIS_STATUS_SUCCESS;
}
+
+/*
+ * @implemented
+ */
+VOID
+EXPORT
+NdisMapIoSpace(
+ OUT PNDIS_STATUS Status,
+ OUT PVOID *VirtualAddress,
+ IN NDIS_HANDLE NdisAdapterHandle,
+ IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
+ IN UINT Length)
+/*
+ * FUNCTION:
+ * ARGUMENTS:
+ * NOTES:
+ * NDIS 4.0
+ */
+{
+ *Status = NdisMMapIoSpace(VirtualAddress,
+ NdisAdapterHandle,
+ PhysicalAddress,
+ Length);
+}
+
+
/* EOF */
diff --git a/reactos/drivers/network/ndis/ndis/memory.c b/reactos/drivers/network/ndis/ndis/memory.c
index 22fe324e828..d6586912d04 100644
--- a/reactos/drivers/network/ndis/ndis/memory.c
+++ b/reactos/drivers/network/ndis/ndis/memory.c
@@ -135,36 +135,6 @@ NdisFreeMemory(
ExFreePool(VirtualAddress);
}
-
-/*
- * @unimplemented
- */
-VOID
-EXPORT
-NdisImmediateReadSharedMemory(
- IN NDIS_HANDLE WrapperConfigurationContext,
- IN ULONG SharedMemoryAddress,
- OUT PUCHAR Buffer,
- IN ULONG Length)
-{
- UNIMPLEMENTED
-}
-
-
-/*
- * @unimplemented
- */
-VOID
-EXPORT
-NdisImmediateWriteSharedMemory(
- IN NDIS_HANDLE WrapperConfigurationContext,
- IN ULONG SharedMemoryAddress,
- IN PUCHAR Buffer,
- IN ULONG Length)
-{
- UNIMPLEMENTED
-}
-
/*
* @implemented
@@ -197,24 +167,6 @@ NdisMAllocateSharedMemory(
Adapter->NdisMiniportBlock.SystemAdapterObject, Length, PhysicalAddress, Cached);
}
-
-/*
- * @unimplemented
- */
-NDIS_STATUS
-EXPORT
-NdisMAllocateSharedMemoryAsync(
- IN NDIS_HANDLE MiniportAdapterHandle,
- IN ULONG Length,
- IN BOOLEAN Cached,
- IN PVOID Context)
-{
- NDIS_DbgPrint(MAX_TRACE, ("Called.\n"));
- UNIMPLEMENTED
-
- return NDIS_STATUS_FAILURE;
-}
-
VOID
NTAPI
@@ -293,5 +245,52 @@ NdisMFreeSharedMemory(
ZwClose(ThreadHandle);
}
+
+/*
+ * @implemented
+ */
+VOID
+EXPORT
+NdisAllocateSharedMemory(
+ IN NDIS_HANDLE NdisAdapterHandle,
+ IN ULONG Length,
+ IN BOOLEAN Cached,
+ OUT PVOID *VirtualAddress,
+ OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress)
+{
+ NdisMAllocateSharedMemory(NdisAdapterHandle,
+ Length,
+ Cached,
+ VirtualAddress,
+ PhysicalAddress);
+}
+
+
+/*
+ * @implemented
+ */
+VOID
+EXPORT
+NdisFreeSharedMemory(
+ IN NDIS_HANDLE NdisAdapterHandle,
+ IN ULONG Length,
+ IN BOOLEAN Cached,
+ IN PVOID VirtualAddress,
+ IN NDIS_PHYSICAL_ADDRESS PhysicalAddress)
+/*
+ * FUNCTION:
+ * ARGUMENTS:
+ * NOTES:
+ * NDIS 4.0
+ */
+{
+ NdisMFreeSharedMemory(NdisAdapterHandle,
+ Length,
+ Cached,
+ VirtualAddress,
+ PhysicalAddress);
+}
+
+
/* EOF */
diff --git a/reactos/drivers/network/ndis/ndis/miniport.c b/reactos/drivers/network/ndis/ndis/miniport.c
index 7d5108d5eaf..fba9bd28f19 100644
--- a/reactos/drivers/network/ndis/ndis/miniport.c
+++ b/reactos/drivers/network/ndis/ndis/miniport.c
@@ -2491,5 +2491,44 @@ NdisMQueryAdapterInstanceName(
return NDIS_STATUS_SUCCESS;
}
+/*
+ * @implemented
+ */
+VOID
+EXPORT
+NdisDeregisterAdapterShutdownHandler(
+ IN NDIS_HANDLE NdisAdapterHandle)
+/*
+ * FUNCTION:
+ * ARGUMENTS:
+ * NOTES:
+ * NDIS 4.0
+ */
+{
+ NdisMDeregisterAdapterShutdownHandler(NdisAdapterHandle);
+}
+
+
+/*
+ * @implemented
+ */
+VOID
+EXPORT
+NdisRegisterAdapterShutdownHandler(
+ IN NDIS_HANDLE NdisAdapterHandle,
+ IN PVOID ShutdownContext,
+ IN ADAPTER_SHUTDOWN_HANDLER ShutdownHandler)
+/*
+ * FUNCTION:
+ * ARGUMENTS:
+ * NOTES:
+ * NDIS 4.0
+ */
+{
+ NdisMRegisterAdapterShutdownHandler(NdisAdapterHandle,
+ ShutdownContext,
+ ShutdownHandler);
+}
+
/* EOF */
diff --git a/reactos/drivers/network/ndis/ndis/misc.c b/reactos/drivers/network/ndis/ndis/misc.c
new file mode 100644
index 00000000000..8abd29e147f
--- /dev/null
+++ b/reactos/drivers/network/ndis/ndis/misc.c
@@ -0,0 +1,408 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS NDIS library
+ * FILE: ndis/misc.c
+ */
+
+#include "ndissys.h"
+
+/*
+ * @implemented
+ */
+#undef NdisInterlockedAddUlong
+VOID
+EXPORT
+NdisInterlockedAddUlong (
+ IN PULONG Addend,
+ IN ULONG Increment,
+ IN PNDIS_SPIN_LOCK SpinLock)
+{
+ ExInterlockedAddUlong ( Addend, Increment, (PKSPIN_LOCK)SpinLock );
+}
+
+
+/*
+ * @implemented
+ */
+#undef NdisInterlockedInsertHeadList
+PLIST_ENTRY
+EXPORT
+NdisInterlockedInsertHeadList(
+ IN PLIST_ENTRY ListHead,
+ IN PLIST_ENTRY ListEntry,
+ IN PNDIS_SPIN_LOCK SpinLock)
+{
+ return ExInterlockedInsertHeadList ( ListHead, ListEntry, (PKSPIN_LOCK)SpinLock );
+}
+
+
+/*
+ * @implemented
+ */
+#undef NdisInterlockedInsertTailList
+PLIST_ENTRY
+EXPORT
+NdisInterlockedInsertTailList(
+ IN PLIST_ENTRY ListHead,
+ IN PLIST_ENTRY ListEntry,
+ IN PNDIS_SPIN_LOCK SpinLock)
+{
+ return ExInterlockedInsertTailList ( ListHead, ListEntry, (PKSPIN_LOCK)SpinLock );
+}
+
+
+/*
+ * @implemented
+ */
+#undef NdisInterlockedRemoveHeadList
+PLIST_ENTRY
+EXPORT
+NdisInterlockedRemoveHeadList(
+ IN PLIST_ENTRY ListHead,
+ IN PNDIS_SPIN_LOCK SpinLock)
+{
+ return ExInterlockedRemoveHeadList ( ListHead, (PKSPIN_LOCK)SpinLock );
+}
+
+typedef struct _NDIS_HANDLE_OBJECT
+{
+ HANDLE FileHandle;
+ BOOLEAN Mapped;
+ ULONG FileLength;
+ PVOID MapBuffer;
+} NDIS_HANDLE_OBJECT, *PNDIS_HANDLE_OBJECT;
+
+__inline
+PNDIS_HANDLE_OBJECT
+NDIS_HANDLE_TO_POBJECT ( NDIS_HANDLE handle )
+{
+ return (PNDIS_HANDLE_OBJECT)handle;
+}
+
+__inline
+NDIS_HANDLE
+NDIS_POBJECT_TO_HANDLE ( PNDIS_HANDLE_OBJECT obj )
+{
+ return (NDIS_HANDLE)obj;
+}
+
+const WCHAR* NDIS_FILE_FOLDER = L"\\SystemRoot\\System32\\Drivers\\";
+
+/*
+ * @implemented
+ */
+VOID
+EXPORT
+NdisMapFile(
+ OUT PNDIS_STATUS Status,
+ OUT PVOID *MappedBuffer,
+ IN NDIS_HANDLE FileHandle)
+{
+ PNDIS_HANDLE_OBJECT HandleObject = (PNDIS_HANDLE_OBJECT) FileHandle;
+
+ NDIS_DbgPrint(MAX_TRACE, ("called: FileHandle 0x%x\n", FileHandle));
+
+ if (HandleObject->Mapped)
+ {
+ /* If a file already mapped we will return an error code */
+ *Status = NDIS_STATUS_ALREADY_MAPPED;
+ return;
+ }
+
+ HandleObject->Mapped = TRUE;
+ *MappedBuffer = HandleObject->MapBuffer;
+
+ /* Set returned status */
+ *Status = STATUS_SUCCESS;
+}
+
+/*
+ * @implemented
+ */
+VOID
+EXPORT
+NdisCloseFile(
+ IN NDIS_HANDLE FileHandle)
+{
+ PNDIS_HANDLE_OBJECT FileHandleObject;
+
+ ASSERT_IRQL(PASSIVE_LEVEL);
+
+ ASSERT ( FileHandle );
+
+ FileHandleObject = NDIS_HANDLE_TO_POBJECT(FileHandle);
+
+ ASSERT ( FileHandleObject->FileHandle );
+
+ /*
+ if ( FileHandleObject->Mapped )
+ NdisUnmapFile ( FileHandle );
+ */
+
+ ZwClose ( FileHandleObject->FileHandle );
+
+ memset ( FileHandleObject, 0, sizeof(NDIS_HANDLE_OBJECT) );
+
+ ExFreePool ( FileHandleObject );
+}
+
+
+/*
+ * @implemented
+ */
+VOID
+EXPORT
+NdisOpenFile(
+ OUT PNDIS_STATUS Status,
+ OUT PNDIS_HANDLE FileHandle,
+ OUT PUINT FileLength,
+ IN PNDIS_STRING FileName,
+ IN NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress)
+{
+ NDIS_STRING FullFileName;
+ OBJECT_ATTRIBUTES ObjectAttributes;
+ PNDIS_HANDLE_OBJECT FileHandleObject = NULL;
+ IO_STATUS_BLOCK IoStatusBlock;
+
+ ASSERT_IRQL(PASSIVE_LEVEL);
+
+ *Status = NDIS_STATUS_SUCCESS;
+ FullFileName.Buffer = NULL;
+
+ ASSERT ( Status && FileName );
+
+ FullFileName.Length = sizeof(NDIS_FILE_FOLDER);
+ FullFileName.MaximumLength = FileName->MaximumLength + sizeof(NDIS_FILE_FOLDER);
+ FullFileName.Buffer = ExAllocatePool ( NonPagedPool, FullFileName.MaximumLength );
+
+ if ( !FullFileName.Buffer )
+ {
+ *Status = NDIS_STATUS_RESOURCES;
+ goto cleanup;
+ }
+
+ FileHandleObject = ExAllocatePool ( NonPagedPool, sizeof(NDIS_HANDLE_OBJECT) );
+ if ( !FileHandleObject )
+ {
+ *Status = NDIS_STATUS_RESOURCES;
+ goto cleanup;
+ }
+ memset ( FileHandleObject, 0, sizeof(NDIS_HANDLE_OBJECT) );
+
+ memmove ( FullFileName.Buffer, NDIS_FILE_FOLDER, FullFileName.Length );
+ *Status = RtlAppendUnicodeStringToString ( &FullFileName, FileName );
+ if ( !NT_SUCCESS(*Status) )
+ {
+ *Status = NDIS_STATUS_FAILURE;
+ goto cleanup;
+ }
+
+ InitializeObjectAttributes ( &ObjectAttributes,
+ &FullFileName,
+ OBJ_CASE_INSENSITIVE,
+ NULL,
+ NULL );
+
+ *Status = ZwCreateFile (
+ &FileHandleObject->FileHandle,
+ FILE_READ_DATA|SYNCHRONIZE,
+ &ObjectAttributes,
+ &IoStatusBlock,
+ NULL, // PLARGE_INTEGER AllocationSize
+ 0, // ULONG FileAttributes
+ FILE_SHARE_READ, // ULONG ShareAccess
+ FILE_CREATE, // ULONG CreateDisposition
+ FILE_SYNCHRONOUS_IO_NONALERT, // ULONG CreateOptions
+ 0, // PVOID EaBuffer
+ 0 ); // ULONG EaLength
+
+ if ( !NT_SUCCESS(*Status) )
+ {
+ *Status = NDIS_STATUS_FAILURE;
+ }
+
+cleanup:
+ if ( FullFileName.Buffer != NULL )
+ {
+ ExFreePool ( FullFileName.Buffer );
+ FullFileName.Buffer = NULL;
+ }
+ if ( !NT_SUCCESS(*Status) )
+ {
+ if( FileHandleObject ) {
+ ExFreePool ( FileHandleObject );
+ FileHandleObject = NULL;
+ }
+ *FileHandle = NULL;
+ }
+ else
+ *FileHandle = NDIS_POBJECT_TO_HANDLE(FileHandleObject);
+
+ return;
+}
+
+/*
+ * @implemented
+ */
+CCHAR
+EXPORT
+NdisSystemProcessorCount(
+ VOID)
+{
+ return (CCHAR)KeNumberProcessors;
+}
+
+
+/*
+ * @implemented
+ */
+VOID
+EXPORT
+NdisUnmapFile(
+ IN NDIS_HANDLE FileHandle)
+{
+ PNDIS_HANDLE_OBJECT HandleObject = (PNDIS_HANDLE_OBJECT) FileHandle;
+
+ HandleObject->Mapped = FALSE;
+}
+
+
+/*
+ * @implemented
+ */
+VOID
+EXPORT
+NdisGetCurrentProcessorCounts(
+ OUT PULONG pIdleCount,
+ OUT PULONG pKernelAndUser,
+ OUT PULONG pIndex)
+/*
+ * FUNCTION:
+ * ARGUMENTS:
+ * NOTES:
+ * NDIS 5.0
+ */
+{
+ ExGetCurrentProcessorCounts( (PULONG) pIdleCount, (PULONG) pKernelAndUser, (PULONG) pIndex);
+}
+
+
+/*
+ * @implemented
+ */
+VOID
+EXPORT
+NdisGetSystemUpTime(OUT PULONG pSystemUpTime)
+{
+ ULONG Increment;
+ LARGE_INTEGER TickCount;
+
+ /* Get the increment and current tick count */
+ Increment = KeQueryTimeIncrement();
+ KeQueryTickCount(&TickCount);
+
+ /* Convert to milliseconds and return */
+ TickCount.QuadPart *= Increment;
+ TickCount.QuadPart /= (10 * 1000);
+ *pSystemUpTime = TickCount.LowPart;
+}
+
+/*
+ * @implemented
+ */
+#undef NdisInterlockedDecrement
+LONG
+EXPORT
+NdisInterlockedDecrement(
+ IN PLONG Addend)
+/*
+ * FUNCTION:
+ * ARGUMENTS:
+ * NOTES:
+ * NDIS 5.0
+ */
+{
+ return InterlockedDecrement ( Addend );
+}
+
+
+/*
+ * @implemented
+ */
+#undef NdisInterlockedIncrement
+LONG
+EXPORT
+NdisInterlockedIncrement(
+ IN PLONG Addend)
+/*
+ * FUNCTION:
+ * ARGUMENTS:
+ * NOTES:
+ * NDIS 5.0
+ */
+{
+ return InterlockedIncrement ( Addend );
+}
+
+
+/*
+ * @implemented
+ */
+#undef NdisInterlockedPopEntrySList
+PSINGLE_LIST_ENTRY
+EXPORT
+NdisInterlockedPopEntrySList(
+ IN PSLIST_HEADER ListHead,
+ IN PKSPIN_LOCK Lock)
+/*
+ * FUNCTION:
+ * ARGUMENTS:
+ * NOTES:
+ * NDIS 5.0
+ */
+{
+ return ExInterlockedPopEntrySList ( ListHead, Lock );
+}
+
+
+/*
+ * @implemented
+ */
+#undef NdisInterlockedPushEntrySList
+PSINGLE_LIST_ENTRY
+EXPORT
+NdisInterlockedPushEntrySList(
+ IN PSLIST_HEADER ListHead,
+ IN PSINGLE_LIST_ENTRY ListEntry,
+ IN PKSPIN_LOCK Lock)
+/*
+ * FUNCTION:
+ * ARGUMENTS:
+ * NOTES:
+ * NDIS 5.0
+ */
+{
+ return ExInterlockedPushEntrySList ( ListHead, ListEntry, Lock );
+}
+
+
+VOID
+NTAPI
+ndisProcWorkItemHandler(PVOID pContext)
+{
+ PNDIS_WORK_ITEM pNdisItem = (PNDIS_WORK_ITEM)pContext;
+ pNdisItem->Routine(pNdisItem, pNdisItem->Context);
+}
+
+EXPORT
+NDIS_STATUS
+NdisScheduleWorkItem(
+ IN PNDIS_WORK_ITEM pWorkItem)
+{
+ PWORK_QUEUE_ITEM pntWorkItem = (PWORK_QUEUE_ITEM)pWorkItem->WrapperReserved;
+ ExInitializeWorkItem(pntWorkItem, ndisProcWorkItemHandler, pWorkItem);
+ ExQueueWorkItem(pntWorkItem, CriticalWorkQueue);
+ return NDIS_STATUS_SUCCESS;
+}
+
+/* EOF */
diff --git a/reactos/drivers/network/ndis/ndis/protocol.c b/reactos/drivers/network/ndis/ndis/protocol.c
index a64168280a4..ff1895aed93 100644
--- a/reactos/drivers/network/ndis/ndis/protocol.c
+++ b/reactos/drivers/network/ndis/ndis/protocol.c
@@ -980,4 +980,31 @@ NdisReEnumerateProtocolBindings(IN NDIS_HANDLE NdisProtocolHandle)
ndisBindMiniportsToProtocol(&NdisStatus, &Protocol->Chars);
}
+
+/*
+ * @implemented
+ */
+VOID
+EXPORT
+NdisGetDriverHandle(
+ IN PNDIS_HANDLE NdisBindingHandle,
+ OUT PNDIS_HANDLE NdisDriverHandle)
+/*
+ * FUNCTION:
+ * ARGUMENTS:
+ * NOTES:
+ * NDIS 5.0
+ */
+{
+ PADAPTER_BINDING Binding = (PADAPTER_BINDING)NdisBindingHandle;
+
+ if (!Binding)
+ {
+ *NdisDriverHandle = NULL;
+ return;
+ }
+
+ *NdisDriverHandle = Binding->Adapter->NdisMiniportBlock.DriverHandle;
+}
+
/* EOF */