public static bool DeviceIoControl <TIn>(SafeFileHandle hDev, uint ioControlCode, TIn inVal) where TIn : struct { using (var ptrIn = SafeHGlobalHandle.Alloc(inVal)) { uint bRet; return(Kernel32.DeviceIoControl(hDev, ioControlCode, (IntPtr)ptrIn, (uint)ptrIn.Size, IntPtr.Zero, 0, out bRet, IntPtr.Zero)); } }
public static bool DeviceIoControl <TOut>(SafeFileHandle hDev, uint ioControlCode, out TOut outVal) where TOut : struct { using (var ptrOut = SafeHGlobalHandle.Alloc <TOut>()) { uint bRet; var ret = Kernel32.DeviceIoControl(hDev, ioControlCode, IntPtr.Zero, 0, (IntPtr)ptrOut, (uint)ptrOut.Size, out bRet, IntPtr.Zero); outVal = ptrOut.ToStructure <TOut>(); return(ret); } }