Type a page name and press Enter. You'll jump to the page if it exists, or you can create it if it doesn't.
To create a page in a module other than Structures, prefix the name with the module name and a period.
WLAN_INTERFACE_INFO_LIST (Structures)
.
C# Definition:
/// <summary>
/// Contains an array of NIC information
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public struct WLAN_INTERFACE_INFO_LIST
{
/// <summary>
/// Length of <see cref="InterfaceInfo"/> array
/// Contains an array of NIC information
/// </summary>
public Int32 dwNumberOfItems;
/// <summary>
/// This member is not used by the wireless service. Applications can use this member when processing individual interfaces.
/// </summary>
public Int32 dwIndex;
/// <summary>
/// Array of WLAN interfaces.
/// </summary>
public WLAN_INTERFACE_INFO[] InterfaceInfo;
[StructLayout(LayoutKind.Sequential)]
public struct WLAN_INTERFACE_INFO_LIST
{
/// <summary>
/// Length of <see cref="InterfaceInfo"/> array
/// </summary>
public Int32 dwNumberOfItems;
/// <summary>
/// This member is not used by the wireless service. Applications can use this member when processing individual interfaces.
/// </summary>
public Int32 dwIndex;
/// <summary>
/// Array of WLAN interfaces.
/// </summary>
public WLAN_INTERFACE_INFO[] InterfaceInfo;
/// <summary>
/// Constructor for WLAN_INTERFACE_INFO_LIST.
/// Constructor is needed because the InterfaceInfo member varies based on how many adapters are in the system.
/// </summary>
/// <param name="pList">the unmanaged pointer containing the list.</param>
public WLAN_INTERFACE_INFO_LIST(IntPtr pList)
{
// The first 4 bytes are the number of WLAN_INTERFACE_INFO structures.
dwNumberOfItems = Marshal.ReadInt32(pList, 0);
/// <summary>
/// Constructor for WLAN_INTERFACE_INFO_LIST.
/// Constructor is needed because the InterfaceInfo member varies based on how many adapters are in the system.
/// </summary>
/// <param name="pList">the unmanaged pointer containing the list.</param>
public WLAN_INTERFACE_INFO_LIST(IntPtr pList)
{
// The first 4 bytes are the number of WLAN_INTERFACE_INFO structures.
dwNumberOfItems = Marshal.ReadInt32(pList, 0);
// The next 4 bytes are the index of the current item in the unmanaged API.
dwIndex = Marshal.ReadInt32(pList, 4);
// The next 4 bytes are the index of the current item in the unmanaged API.
dwIndex = Marshal.ReadInt32(pList, 4);
// Construct the array of WLAN_INTERFACE_INFO structures.
InterfaceInfo = new WLAN_INTERFACE_INFO[dwNumberOfItems];
// Construct the array of WLAN_INTERFACE_INFO structures.
InterfaceInfo = new WLAN_INTERFACE_INFO[dwNumberOfItems];
for (int i = 0; i <= dwNumberOfItems- 1; i++) {
// The offset of the array of structures is 8 bytes past the beginning.
// Then, take the index and multiply it by the number of bytes in the
// structure.
// The length of the WLAN_INTERFACE_INFO structure is 532 bytes - this
// was determined by doing a Marshall.SizeOf(WLAN_INTERFACE_INFO)
IntPtr pItemList = new IntPtr(pList.ToInt64() + (i * 532) + 8);
for (int i = 0; i < dwNumberOfItems; i++)
{
// The offset of the array of structures is 8 bytes past the beginning. Then, take the index and multiply it by the number of bytes in the structure.
// the length of the WLAN_INTERFACE_INFO structure is 532 bytes - this was determined by doing a sizeof(WLAN_INTERFACE_INFO) in an unmanaged C++ app.
IntPtr pItemList = new IntPtr(pList.ToInt32() + (i * 532) + 8);
// Construct the WLAN_INTERFACE_INFO structure, marshal the unmanaged
// structure into it, then copy it to the array of structures.
InterfaceInfo[i] = (WLAN_INTERFACE_INFO)Marshal.PtrToStructure(pItemList, typeof(WLAN_INTERFACE_INFO));
}
}
}
// Construct the WLAN_INTERFACE_INFO structure, marshal the unmanaged structure into it, then copy it to the array of structures.
WLAN_INTERFACE_INFO wii = new WLAN_INTERFACE_INFO();
wii = (WLAN_INTERFACE_INFO)Marshal.PtrToStructure(pItemList, typeof(WLAN_INTERFACE_INFO));
InterfaceInfo[i] = wii;
}
}
}
VB Definition:
<StructLayout(LayoutKind.Sequential)> _
Private Structure WLAN_INTERFACE_INFO_LIST
Public dwNumberofItems As Int32
Public dwIndex As Int32
Public InterfaceInfo As WLAN_INTERFACE_INFO()
Public Structure WLAN_INTERFACE_INFO_LIST
Public dwNumberOfItems As Int32
Public dwIndex As Int32
Public InterfaceInfo As WLAN_INTERFACE_INFO()
''' <summary>
''' Constructor for WLAN_INTERFACE_INFO_LIST.
''' Constructor is needed because the InterfaceInfo member varies based on how many adapters are in the system.
''' </summary>
''' <param name="pList">the unmanaged pointer containing the list.</param>
Public Sub New(ByVal pList As IntPtr)
' The first 4 bytes are the number of WLAN_INTERFACE_INFO structures.
dwNumberOfItems = Marshal.ReadInt32(pList, 0)
' The next 4 bytes are the index of the current item in the unmanaged API.
dwIndex = Marshal.ReadInt32(pList, 4)
' Construct the array of WLAN_INTERFACE_INFO structures.
InterfaceInfo = New WLAN_INTERFACE_INFO(dwNumberOfItems - 1) {}
For i As Integer = 0 To dwNumberOfItems - 1
' The offset of the array of structures is 8 bytes past the beginning. Then, take the index and multiply it by the number of bytes in the structure.
' the length of the WLAN_INTERFACE_INFO structure is 532 bytes - this was determined by doing a sizeof(WLAN_INTERFACE_INFO) in an unmanaged C++ app.
Dim pItemList As New IntPtr(pList.ToInt32() + (i * 532) + 8)
' Construct the WLAN_INTERFACE_INFO structure, marshal the unmanaged structure into it, then copy it to the array of structures.
Dim wii As New WLAN_INTERFACE_INFO()
wii = DirectCast(Marshal.PtrToStructure(pItemList, GetType(WLAN_INTERFACE_INFO)), WLAN_INTERFACE_INFO)
InterfaceInfo(i) = wii
Next
End Sub
End Structure
Public Sub New(pList As IntPtr)
' The first 4 bytes are the number of WLAN_INTERFACE_INFO structures.
dwNumberofItems = Marshal.ReadInt32(pList, 0)
Notes:
The constructor of this structure "unmarshal" WLAN_INTERFACE_INFO_LIST data obtained by calling WlanEnumInterfaces(). This is a good example on how to marshal pointer-to-pointer case in C++ world ( kind of confusing because in C# or Managed Environment more broadly, it is just reference, so as you can see from the implementation for C#, it is to be treated like just a single pointer case. Also, this example shows how to handle an array for the InterfaceInfo inside of this structure. It needs two level of marshaling and this example shows that.
' The next 4 bytes are the index of the current item in the unmanaged API.
dwIndex = Marshal.ReadInt32(pList, 4)
' Construct the array of WLAN_INTERFACE_INFO structures.
InterfaceInfo = New WLAN_INTERFACE_INFO(dwNumberofItems - 1) {}
For i As Integer = 0 To dwNumberofItems - 1
' The offset of the array of structures is 8 bytes past the beginning.
' Then, take the index and multiply it by the number of bytes in the
' structure.
' The length of the WLAN_INTERFACE_INFO structure is 532 bytes - this
' was determined by doing a Marshall.SizeOf(WLAN_INTERFACE_INFO)
Dim pItemList As New IntPtr(pList.ToInt64() + (i * 532) + 8)
' Construct the WLAN_INTERFACE_INFO structure, marshal the unmanaged
' structure into it, then copy it to the array of structures.
InterfaceInfo(i) = DirectCast(Marshal.PtrToStructure(pItemList, GetType(WLAN_INTERFACE_INFO)), WLAN_INTERFACE_INFO)
Next
End Sub
The constructor of this structure "unmarshal" WLAN_INTERFACE_INFO_LIST data obtained by calling WlanEnumInterfaces(). This is a good example on how to marshal pointer-to-pointer case in C++ world ( kind of confusing because in C# or Managed Environment more broadly, it is just reference, so as you can see from the implementation for C#, it is to be treated like just a single pointer case. Also, this example shows how to handle an array for the InterfaceInfo inside of this structure. It needs two level of marshaling and this example shows that.
Contains information about a wireless LAN interface.
1/30/2020 12:20:31 PM - -139.71.144.4
Contains information about a wireless LAN interface.
1/30/2020 12:20:31 PM - -139.71.144.4
Please edit this page!
Do you have...
helpful tips?
corrections to the existing content?
alternate definitions?
additional languages you want to include?
Select "Edit This Page" on the right hand toolbar and edit it! Or add new pages containing any supporting types needed.