vb .net createfile,WinUsb,必须释放资源吗?

时间:2012-12-21 18:01:47

标签: vb.net

我必须在某些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

1 个答案:

答案 0 :(得分:1)

您从HANDLE获得的CreateFile()必须通过CloseHandle()进行排版。

您从WINUSB_INTERFACE_HANDLE获得的WinUSB_Initialize()必须通过WinUSB_Free()进行排版。

请注意,这些要求在MSDN Library文章中详细说明了这些功能。