次のプロジェクトhttp://www.codeproject.com/Articles/32026/Capturing-Device-Events-in-aC-Windows-Serviceを適応させて、USBディスクを検出し、それを取り出したり、インストールベースで停止したりしようとしています。識別文字列。まず、コードのこの部分に到達すると、プロジェクトが正しく実行されません。if(hdr.dbcc_devicetype == Win32.DBT_DEVTYP_DEVICEINTERFACE){
Win32.DEV_BROADCAST_DEVICEINTERFACE deviceInterface;
deviceInterface = (Win32.DEV_BROADCAST_DEVICEINTERFACE)
Marshal.PtrToStructure(eventData, typeof(Win32.DEV_BROADCAST_DEVICEINTERFACE));
string name = new string(deviceInterface.dbcc_name);
name = name.Substring(0, name.IndexOf('\0')) + "\\";
StringBuilder stringBuilder = new StringBuilder();
Win32.GetVolumeNameForVolumeMountPoint(name, stringBuilder, 100);
uint stringReturnLength = 0;
string driveLetter = "";
Win32.GetVolumePathNamesForVolumeNameW(stringBuilder.ToString(), driveLetter, (uint) driveLetter.Length, ref stringReturnLength);
if (stringReturnLength == 0)
{
// TODO handle error
}
driveLetter = new string(new char[stringReturnLength]);
if (!Win32.GetVolumePathNamesForVolumeNameW(stringBuilder.ToString(), driveLetter, stringReturnLength, ref stringReturnLength))
{
//// TODO handle error
}
RegisterForHandle(driveLetter[0]);
....}ドライブ文字を取得することはなく、driveLetter文字列は常に空白です。stringBuilder =ôu<¬ë6で、名前変数は= \?\ USBSTOR#Disk&Ven_&Prod_USB_DISK_2.0&Rev_PMAP#07A512076EB115FA&0#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}\になります。
どうしたの?または私がやろうとしていることについてのアイデアはありますか?