@msdn=http://search.microsoft.com/search/results.aspx?qu=$$$ @pinvoke=http://pinvoke.net/$$$.htm Summary: TODO - a short description !!!!C# Signature: [DllImport("setupapi.dll", CharSet = CharSet.Auto)] static extern int CM_Request_Device_Eject(UInt32 devinst, out PNP_VETO_TYPE pVetoType, System.Text.StringBuilder pszVetoName, int ulNameLength, int ulFlags); !!!!VB Signature: Declare Function CM_Request_Device_Eject Lib "setupapi.dll" (TODO) As TODO !!!!User-Defined Types: enum PNP_VETO_TYPE : int { PNP_VetoTypeUnknown = 0, PNP_VetoLegacyDevice = 1, PNP_VetoPendingClose = 2, PNP_VetoWindowsApp = 3, PNP_VetoWindowsService = 4, PNP_VetoOutstandingOpen = 5, PNP_VetoDevice = 6, PNP_VetoDriver = 7, PNP_VetoIllegalDeviceRequest = 8, PNP_VetoInsufficientPower = 9, PNP_VetoNonDisableable = 10, PNP_VetoLegacyDriver = 11, PNP_VetoInsufficientRights = 12 } !!!!Alternative Managed API: Do you know one? Please contribute it! !!!!Notes: CM_Query_And_Remove_SubTree has the same signature. CM_Request_Device_Eject_NoUi also can be used to eject a device. It has the same signature too. This is not the correct signature for 64-bit Windows... !!!!Tips & Tricks: Please add some! !!!!Sample Code: // Assuming have IntPtr devinst already // // static readonly int CR_SUCCESS = 0x00000000; // cfgmgr32.h // static readonly int DN_REMOVABLE = 0x00004000; // cfg.h if (CR_SUCCESS == CM_Get_DevNode_Status(ref status, ref problem, devinst, 0) && (DN_REMOVABLE & status) > 0) { PNP_VETO_TYPE pnp_veto_type; System.Text.StringBuilder sb = new System.Text.StringBuilder(255); bool success = (CR_SUCCESS == CM_Request_Device_Eject(devinst, out pnp_veto_type, sb, sb.Capacity, 0)); } !!!!Sample Code: public string Eject(bool allowUI) { if (!allowUI) { CM_Request_Device_Eject_NoUi((int)USBData.DevInst, IntPtr.Zero, null, 0, 0); // USBData, a SP_DEVINFO_DATA structure. } else { StringBuilder sb = new StringBuilder(1024); PNP_VETO_TYPE veto; // PNP_VETO_TYPE enumeration is used to identify the reason for rejection int hr = CM_Request_Device_Eject((int)USBData.DevInst, out veto, sb, sb.Capacity, 0); if (hr != 0) throw new Win32Exception(hr); if (veto != PNP_VETO_TYPE.Ok) return veto.ToString(); } return null; } Documentation: CM_Request_Device_Eject@msdn on MSDN
Edit setupapi.CM_Reque...
You do not have permission to change this page. If you feel this is in error, please send feedback with the contact link on the main page.