Dear all,

I want to control a NDIS device via NDISUIO drvier.
Also, I want to use NDISUIO driver to write and read data.

Now, I can create the handle for the device.
When I want to bind the handler to the adapter,
it occur error.

PS1: My WLAN card is CISCO Aironet 350, My OS is WinCE.NET 4.2
PS2: My code is as following.

-Kemin
----------------------------------------------------------------------
BOOL UnReBindAdapter( int nBindType, PVOID pAdapter, DWORD dwAdapterLen,
PVOID pProtocol, DWORD dwProtocolLen )
{
CHAR Buf[512];
HANDLE hPhysicalDevice;
DWORD bResult,dwReturnedBytes;

memset( Buf, 0, 512 );
memcpy( Buf, pAdapter, dwAdapterLen );
memcpy( Buf+dwAdapterLen, pProtocol, dwProtocolLen );

hPhysicalDevice = CreateFile( _T("NDS1:"), GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
INVALID_HANDLE_VALUE);

if( INVALID_HANDLE_VALUE == hPhysicalDevice )
{
CommEvent::PrintEvent( "INVALID_HANDLE_VALUE\n" );
return bResult;
}

bResult = DeviceIoControl(
hPhysicalDevice,

(nBindType==BIND ? (IOCTL_NDIS_BIND_ADAPTER) :
(nBindType==UNBIND ? (IOCTL_NDIS_UNBIND_ADAPTER) :
(IOCTL_NDIS_REBIND_ADAPTER) ) ),

Buf,
512,
NULL,
0,
&dwReturnedBytes,
NULL);

CloseHandle(hPhysicalDevice);

return bResult;
}

Re: How to control a NDIS device via NDISUIO driver by Paul

Paul
Wed Oct 05 19:16:21 CDT 2005

So what's the problem? Your code seems roughly correct for binding and
unbinding an adapter, although I didn't try to compile and run it. Why
would you want to read and write data directly to the device?

Paul T.

"kemin" <kemin@discussions.microsoft.com> wrote in message
news:B0EC331E-6D61-403F-B710-CA8A7E943F85@microsoft.com...
> Dear all,
>
> I want to control a NDIS device via NDISUIO drvier.
> Also, I want to use NDISUIO driver to write and read data.
>
> Now, I can create the handle for the device.
> When I want to bind the handler to the adapter,
> it occur error.
>
> PS1: My WLAN card is CISCO Aironet 350, My OS is WinCE.NET 4.2
> PS2: My code is as following.
>
> -Kemin
> ----------------------------------------------------------------------
> BOOL UnReBindAdapter( int nBindType, PVOID pAdapter, DWORD dwAdapterLen,
> PVOID pProtocol, DWORD dwProtocolLen )
> {
> CHAR Buf[512];
> HANDLE hPhysicalDevice;
> DWORD bResult,dwReturnedBytes;
>
> memset( Buf, 0, 512 );
> memcpy( Buf, pAdapter, dwAdapterLen );
> memcpy( Buf+dwAdapterLen, pProtocol, dwProtocolLen );
>
> hPhysicalDevice = CreateFile( _T("NDS1:"), GENERIC_READ|GENERIC_WRITE,
> FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING,
> FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
> INVALID_HANDLE_VALUE);
>
> if( INVALID_HANDLE_VALUE == hPhysicalDevice )
> {
> CommEvent::PrintEvent( "INVALID_HANDLE_VALUE\n" );
> return bResult;
> }
>
> bResult = DeviceIoControl(
> hPhysicalDevice,
>
> (nBindType==BIND ? (IOCTL_NDIS_BIND_ADAPTER) :
> (nBindType==UNBIND ? (IOCTL_NDIS_UNBIND_ADAPTER) :
> (IOCTL_NDIS_REBIND_ADAPTER) ) ),
>
> Buf,
> 512,
> NULL,
> 0,
> &dwReturnedBytes,
> NULL);
>
> CloseHandle(hPhysicalDevice);
>
> return bResult;
> }



Re: How to control a NDIS device via NDISUIO driver by kemin

kemin
Thu Oct 06 06:54:03 CDT 2005

Dear Paul,

Thanks for your reply.

I've solved the problem by disabling some services on WinCE 4.2.

Because I want to implement a special WLAN authentication
protocol(EAP-SIM)
that is not supported on WinCE 4.2 now.
So I have to make my own ethernet frame and send it the the device.
That's the reason why I want to read and write data directly to the
device.

-Kemin




"Paul G. Tobey [eMVP]" wrote:

> So what's the problem? Your code seems roughly correct for binding and
> unbinding an adapter, although I didn't try to compile and run it. Why
> would you want to read and write data directly to the device?
>
> Paul T.
>
> "kemin" <kemin@discussions.microsoft.com> wrote in message
> news:B0EC331E-6D61-403F-B710-CA8A7E943F85@microsoft.com...
> > Dear all,
> >
> > I want to control a NDIS device via NDISUIO drvier.
> > Also, I want to use NDISUIO driver to write and read data.
> >
> > Now, I can create the handle for the device.
> > When I want to bind the handler to the adapter,
> > it occur error.
> >
> > PS1: My WLAN card is CISCO Aironet 350, My OS is WinCE.NET 4.2
> > PS2: My code is as following.
> >
> > -Kemin
> > ----------------------------------------------------------------------
> > BOOL UnReBindAdapter( int nBindType, PVOID pAdapter, DWORD dwAdapterLen,
> > PVOID pProtocol, DWORD dwProtocolLen )
> > {
> > CHAR Buf[512];
> > HANDLE hPhysicalDevice;
> > DWORD bResult,dwReturnedBytes;
> >
> > memset( Buf, 0, 512 );
> > memcpy( Buf, pAdapter, dwAdapterLen );
> > memcpy( Buf+dwAdapterLen, pProtocol, dwProtocolLen );
> >
> > hPhysicalDevice = CreateFile( _T("NDS1:"), GENERIC_READ|GENERIC_WRITE,
> > FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING,
> > FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
> > INVALID_HANDLE_VALUE);
> >
> > if( INVALID_HANDLE_VALUE == hPhysicalDevice )
> > {
> > CommEvent::PrintEvent( "INVALID_HANDLE_VALUE\n" );
> > return bResult;
> > }
> >
> > bResult = DeviceIoControl(
> > hPhysicalDevice,
> >
> > (nBindType==BIND ? (IOCTL_NDIS_BIND_ADAPTER) :
> > (nBindType==UNBIND ? (IOCTL_NDIS_UNBIND_ADAPTER) :
> > (IOCTL_NDIS_REBIND_ADAPTER) ) ),
> >
> > Buf,
> > 512,
> > NULL,
> > 0,
> > &dwReturnedBytes,
> > NULL);
> >
> > CloseHandle(hPhysicalDevice);
> >
> > return bResult;
> > }
>
>
>