コード例 #1
0
 private void RemoveHookedDrive(RemoveQueryHook hookedDrive)
 {
     if (hookedDrive != null)
     {
         mHookedDrives.Remove(hookedDrive);
         hookedDrive.Dispose();
     }
 }
コード例 #2
0
 public void HookQueryRemove(char driveLetter)
 {
     try
     {
         if (FindHookedDrive(driveLetter) == null)
         {
             RemoveQueryHook hookedDrive = new RemoveQueryHook(driveLetter, mControlHandle);
             mHookedDrives.Add(hookedDrive);
         }
     }
     catch (System.Exception)
     {
     }
 }
コード例 #3
0
 public override bool Equals(object obj)
 {
     if (obj is RemoveQueryHook)
     {
         RemoveQueryHook driveObj = ( RemoveQueryHook )obj;
         return(driveObj.mRegisterDeviceHandle.Equals(this.mRegisterDeviceHandle));
     }
     else if (obj is IntPtr)
     {
         IntPtr devHandle = (IntPtr)obj;
         return(devHandle.Equals(this.mRegisterDeviceHandle));
     }
     else
     {
         return(base.Equals(obj));
     }
 }
コード例 #4
0
 private void RemoveHookedDrive( RemoveQueryHook hookedDrive )
 {
     if ( hookedDrive != null )
     {
         mHookedDrives.Remove( hookedDrive );
         hookedDrive.Dispose();
     }
 }
コード例 #5
0
 public void HookQueryRemove( char driveLetter )
 {
     try
     {
         if ( FindHookedDrive( driveLetter ) == null )
         {
             RemoveQueryHook hookedDrive = new RemoveQueryHook( driveLetter, mControlHandle );
             mHookedDrives.Add( hookedDrive );
         }
     }
     catch ( System.Exception )
     {
     }
 }
コード例 #6
0
        public bool WndProc(ref Message m)
        {
            bool callBaseWndProc = true;

            try
            {
                if (m.Msg == WM_DEVICECHANGE)
                {
                    int wParam = m.WParam.ToInt32();

                    if (wParam == DBT_DEVICEARRIVAL || wParam == DBT_DEVICEREMOVECOMPLETE || wParam == DBT_DEVICEQUERYREMOVE)
                    {
                        DEV_BROADCAST_HDR baseStructure = (DEV_BROADCAST_HDR)Marshal.PtrToStructure(m.LParam, typeof(DEV_BROADCAST_HDR));

                        switch (baseStructure.dbch_devicetype)
                        {
                        case DBT_DEVTYP_VOLUME:
                        {
                            DEV_BROADCAST_VOLUME vol = (DEV_BROADCAST_VOLUME)Marshal.PtrToStructure(m.LParam, typeof(DEV_BROADCAST_VOLUME));
                            char driveLetter         = DriveMaskToLetter(vol.dbcv_unitmask);

                            switch (wParam)
                            {
                            case DBT_DEVICEARRIVAL:
                                HandleDeviceInserted(driveLetter);
                                break;

                            case DBT_DEVICEREMOVECOMPLETE:
                                HandleDeviceRemoved(driveLetter);
                                break;
                            }
                        }
                        break;

                        case DBT_DEVTYP_HANDLE:
                        {
                            DEV_BROADCAST_HANDLE handle      = (DEV_BROADCAST_HANDLE)Marshal.PtrToStructure(m.LParam, typeof(DEV_BROADCAST_HANDLE));
                            RemoveQueryHook      hookedDrive = null;
                            lock ( mEventHandlerMutex )
                            {
                                hookedDrive = FindHookedDrive(handle.dbch_hdevnotify);
                            }

                            if (hookedDrive != null)
                            {
                                switch (wParam)
                                {
                                case DBT_DEVICEQUERYREMOVE:
                                    callBaseWndProc = HandleDeviceRemoveQuery(hookedDrive.DriveLetter, ref m);
                                    break;
                                }
                            }
                        }
                        break;
                        }
                    }
                }
            }
            catch (System.Exception e)
            {
                UsbDriveList.__LogError(this, "DriveDetector.WndProc", e);
            }
            return(callBaseWndProc);
        }