我必须在某些VB .NET项目中使用从kernel32.dll导入的CreateFile来获取WinUSB其他功能的一些句柄。
问题是当我不再需要句柄时,我是否需要在CreateFile之后以某种方式销毁某些内容?
第二个问题是我使用WinUsb_Initialize()和CreateFile返回句柄来获取WinUSB目的的另一个句柄。我是否也需要做一些清洁工作?
提前致谢,
<DllImport("kernel32.dll",
SetLastError:=True,
CharSet:=CharSet.Auto)> _
Private Shared Function CreateFile(ByVal lpFileName As String,
ByVal dwDesiredAccess As Int32,
ByVal dwShareMode As UInt32,
ByVal lpSecurityAttributes As IntPtr,
ByVal dwCreationDisposition As UInt32,
ByVal dwFlagsAndAttributes As UInt32,
ByVal hTemplateFile As IntPtr) As SafeFileHandle
End Function
<DllImport("kernel32.dll",
CharSet:=CharSet.Auto,
SetLasterror:=True)>
Public Shared Function CloseHandle(ByVal Handle As Integer) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function
现在我在某处读到如果我在CreateFile中使用安全程序,则不需要CloseHandle。 这是我的“断开连接”代码
Dim ErrorStatus As Integer = 0
If hWinUSBInterface <> INVALID_HANDLE_VALUE Then
WinUsb_Free(hWinUSBInterface)
hWinUSBInterface = INVALID_HANDLE_VALUE
End If
If hDevice <> INVALID_HANDLE_VALUE Then
'hDevice = INVALID_HANDLE_VALUE
'RaiseEvent Error(ErrorStatus, "Disconnect")
If CloseHandle(hDevice) Then
hDevice = INVALID_HANDLE_VALUE
RaiseEvent Disconnected()
Else
ErrorStatus = Err.LastDllError
RaiseEvent Error(ErrorStatus, "Disconnect")
End If
End If
答案 0 :(得分:1)
您从HANDLE
获得的CreateFile()
必须通过CloseHandle()
进行排版。
您从WINUSB_INTERFACE_HANDLE
获得的WinUSB_Initialize()
必须通过WinUSB_Free()
进行排版。
请注意,这些要求在MSDN Library文章中详细说明了这些功能。