[DllImport("setupapi.dll", CharSet = CharSet.Auto)]
static extern int CM_Request_Device_Eject(IntPtr devinst, out PNP_VETO_TYPE pVetoType, System.Text.StringBuilder pszVetoName, int ulNameLength, int ulFlags);
Declare Function CM_Request_Device_Eject Lib "setupapi.dll" (TODO) As TODO
enum PNP_VETO_TYPE : int
{
PNP_VetoTypeUnknown,
PNP_VetoLegacyDevice,
PNP_VetoPendingClose,
PNP_VetoWindowsApp,
PNP_VetoWindowsService,
PNP_VetoOutstandingOpen,
PNP_VetoDevice,
PNP_VetoDriver,
PNP_VetoIllegalDeviceRequest,
PNP_VetoInsufficientPower,
PNP_VetoNonDisableable,
PNP_VetoLegacyDriver,
}
Do you know one? Please contribute it!
CM_Query_And_Remove_SubTree has the same signature.
Please add some!
// 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));
}