Remote NDIS (RNDIS) Frequently Asked Questions

 

For which Windows Platforms are RNDIS USB drivers available for redistribution?

 

RNDIS over USB drivers are available for redistribution for Windows 98, Windows 98 Second Edition, Windows Millennium Edition, and Windows 2000.

Windows XP and subsequent Windows releases have the drivers included as part of the product.

 

RNDIS over USB support for Windows CE is under development and the release date is unknown at this time.

 

How do I get Windows Logo for my device using RNDIS USB?

 

Create a driver distribution package for your device and run the WHQL Network HCTs (Hardware Compatibility Tests) against your device using the RNDIS USB drivers.  Submit the results per WHQL instructions along with the RNDIS USB drivers.  See http://www.microsoft.com/hwtest.

  

What other I/O busses are supported by RNDIS?

 

Currently only RNDIS over USB is implemented and released.  RNDIS over InfiniBand is being developed. 

 

How are the RNDIS drivers distributed?

 

The RNDIS drivers for released versions of Windows that don’t have native support for RNDIS are available on a Microsoft web site for download by IHVs (Independent Hardware Vendors).  The IHVs will be able to redistribute the drivers upon agreeing to the redistribution agreement that is included with the package containing this document..  The IHV will also be provided with an End User License Agreement (EULA) that must be distributed with the driver to end users.  Windows XP is the first version of Windows with native final versions of the RNDIS USB drivers.

 

See http://www.microsoft.com/hwdev .

 

How do I write an INF file to use RNDIS with my device?

 

The RNDIS driver download package includes a template INF file and documentation on how to modify this INF to support your device.

 

Can I use vendor-specific advanced properties with my RNDIS device?

 

When constructing your INF file for your device you can include ndi/param registry keywords and values just like an INF for a traditional PCI device.  The RNDIS driver will supply these keywords and values to your device during initialization.

 

Why are there two binary drivers for RNDIS USB (rndismp.sys & usb8023.sys)?

 

We have designed the RNDIS drivers to allow us to re-use the rndismp.sys driver for RNDIS over other busses.  For RNDIS USB devices usb8023.sys is the actual driver that is loaded for your device .  Rndismp.sys is an export driver (kernel DLL) and usb8023.sys is linked to it.  When usb8023.sys is loaded the kernel automatically loads rndismp.sys.  Both drivers must be present for RNDIS USB to function.   In the future there will be additional bus-specific drivers for other busses but only one shared rndismp.sys.

 

Is there sample code that I can use to develop RNDIS firmware on my device?

 

No, there is not any sample code.

 

What is the purpose of the checked versions of the rndismp.sys, rndismpm.sys and rndismpw.sys?

 

The checked (debug) rndismp(m,w).sys drivers have debug tracing compiled into them for debugging purposes.  The following describes how to use this tracing mechanism.  This tracing mechanism is subject to change with any future release of the drivers.  New instructions will be provided at that time

 

The following bits are defined in a global variable RndismpDebugFlags in rndismp.sys. TRACEn messages become more verbose as n increases. The bits should be OR'ed to get combinations of various debug messages.

 

UINT            RndismpDebugFlags = DBG_LEVEL0 | DBG_LEVEL1;

 

#define DBG_LEVEL0          0x1000      // Display TRACE0 messages

#define DBG_LEVEL1          0x0001      // Display TRACE1 messages

#define DBG_LEVEL2          0x0002      // Display TRACE2 messages

#define DBG_LEVEL3          0x0004      // Display TRACE3 messages

#define DBG_OID_LIST       0x0008      // display OID list

#define DBG_OID_NAME   0x0010      // display name of OID in query and set routines

#define DBG_DUMP            0x0020      // Display buffer dumps

#define DBG_LOG_SENDS 0x0100      // Log sent messages.

 

If symbols aren't available, look for the opening debug message from rndismp.sys that prints the address of RndismpDebugFlags; something like:

 

RNDISMP: RndismpDebugFlags set to 1001, &RndismpDebugFlags is FBF862C4

 

Using this example address of RndismpDebugFlags you can set the value to 1003 after breaking into the debugger with the following “enter dword – ed” command:

 

ed FBF862C4 1003

 

Alternatively using the latest released Windows 2000 and Windows XP debuggers from Microsoft you set a breakpoint using the command:

 

bp rndismp!DllInitialize

 

Then step a few times until the debug message prints out, use the ‘ed’ command above, and continue.

 

End of FAQ