主要原因应该是64位系统分配错误
其中定义SP_DEVICE_INTERFACE_DATA中int 类型更换为uint,并添加Pack =1,PACK=8应该是32位系统。这里我就解决了返回FALSE,错误代码1784的问题
[StructLayout(LayoutKind.Sequential,Pack =1)]
public struct SP_DEVICE_INTERFACE_DATA
{
public uint cbSize;
public Guid interfaceClassGuid;
public uint flags;
public IntPtr reserved;
}