DeviceIoControl (kernel32)
Last changed: -100.11.86.164

.
Summary

C# Signature:

[DllImport("kernel32.dll", ExactSpelling = true, SetLastError = true, CharSet = CharSet.Auto)]
static extern bool DeviceIoControl(IntPtr hDevice, uint dwIoControlCode,
IntPtr lpInBuffer, uint nInBufferSize,
IntPtr lpOutBuffer, uint nOutBufferSize,
out uint lpBytesReturned, IntPtr lpOverlapped);

VB Signature:

<DllImport("kernel32.dll", ExactSpelling:=True, SetLastError:=True, CharSet:=CharSet.Auto)> _
   Private Shared Function DeviceIoControl(ByVal hDevice As IntPtr, _
     ByVal dwIoControlCode As Int32, ByVal lpInBuffer As IntPtr, _
     ByVal nInBufferSize As Int32, ByVal lpOutBuffer As IntPtr, _
     ByVal nOutBufferSize As Int32, ByRef lpBytesReturned As Int32, _
     ByVal lpOverlapped As OVERLAPPED) As Boolean
   End Function

User-Defined Types:

None.

Notes:

None.

Tips & Tricks:

This is great for interacting with devices; now perhaps someone can help with the SetupDi calls to actually discover the device handles, etc...? If you are able to conquer it (I wasn't) toss me a mail at dotnet at richardgoodwin dot com

-

Richard:

hDevice

in Handle to the device that is to perform the operation. To obtain a device handle, call the CreateFile function.

Sample Code:

Public ReadOnly Property CardID() As String
  Get
   Dim dwErrorCode As FarcConstants
   Dim dwBytesReceived As Int32
   Dim ip As IntPtr = Marshal.AllocHGlobal(13)
   Dim erg As String
   If DeviceIoControl(hDriver, IOCTL_FARC_GET_CARDID, Nothing, 0, ip, 13, dwBytesReceived, Nothing) Then
     erg = Marshal.PtrToStringAnsi(ip)
     Marshal.FreeHGlobal(ip)
   Else
     dwErrorCode = Marshal.GetLastWin32Error
     Marshal.FreeHGlobal(ip)
     Throw New InvalidOperationException("Get Card ID fails. Errorcode: " & _
       dwErrorCode.ToString, New System.ComponentModel.Win32Exception(dwErrorCode))
   End If
   Return erg
  End Get
End Property

Alternative Managed API:

Do you know one? Please contribute it!

Documentation