private static extern IntPtr CreateFile( [In] String lpFileName, WinAPI.FILE_ACCESS_FLAGS dwDesiredAccess, WinAPI.FILE_SHARE dwShareMode, IntPtr lpSecurityAttributes, WinAPI.CreateDisposition dwCreationDisposition, UInt32 dwFlagsAndAttributes, IntPtr hTemplateFile);
/// <summary>Create instance of device info class by device ID or drive letter</summary> /// <param name="deviceId">ID of device</param> /// <param name="deviceName">name of device</param> /// <param name="accessFlags">Device desired access flags</param> /// <param name="shareMode">Opened device share mode</param> /// <exception cref="ArgumentException">Device id does not specified</exception> public DeviceIoControl(Byte?deviceId, String deviceName, WinAPI.FILE_ACCESS_FLAGS accessFlags, WinAPI.FILE_SHARE shareMode) { //DriveInfo.GetDrives() this._deviceId = deviceId; if (deviceId.HasValue) { this._deviceName = DeviceIoControl.GetDeviceName(deviceId.Value); } else if (!String.IsNullOrEmpty(deviceName)) { Char deviceLetter = Array.Find(deviceName.ToCharArray(), delegate(Char ch) { return(Char.IsLetter(ch)); }); this._deviceName = String.Format(Constant.DriveWinNTArg1, deviceLetter); } else { throw new ArgumentException("Device id does not specified"); } this._deviceHandle = Methods.OpenDevice(this.Name, accessFlags, shareMode); }
/// <summary>Opens specified device</summary> /// <param name="lpFileName">Device path</param> /// <param name="dwDesiredAccess">Desired access flage</param> /// <param name="dwShareMode">Share mode</param> /// <exception cref="ArgumentNullException">lpFileName is null or empty</exception> /// <exception cref="Win32Exception">Device does not opened</exception> /// <returns>Handle to the opened device</returns> public static IntPtr OpenDevice(String lpFileName, WinAPI.FILE_ACCESS_FLAGS dwDesiredAccess, WinAPI.FILE_SHARE dwShareMode) { if (String.IsNullOrEmpty(lpFileName)) { throw new ArgumentNullException("lpFileName"); } IntPtr result = Methods.CreateFile(lpFileName, dwDesiredAccess, dwShareMode, IntPtr.Zero, WinAPI.CreateDisposition.OPEN_EXISTING, 0, IntPtr.Zero); if (result == Constant.INVALID_HANDLE_VALUE) { throw new Win32Exception(); } return(result); }