DBT_DEVICEQUERYREMOVE

DBT_DEVICEQUERYREMOVEは、RegisterDeviceNotificationによるデバイス通知登録済みで、デバイス削除の要求が来た時に発生する。

DBT_DEVICEQUERYREMOVE イベント (Dbt.h) - Win32 apps | Microsoft Learn
デバイスを削除する要求の処理 - Win32 apps | Microsoft Learn

この時に、開いていたディレクトリハンドルを閉じれば、取り出し成功になる。
DBT_DEVICEQUERYREMOVE.cppで、

hDirectoryもstaticに。

バイス通知登録の後、ここではハンドルを閉じない。

DBT_DEVICEQUERYREMOVEのDBT_DEVTYP_HANDLEで、ディレクトリハンドルを閉じる。
そうすると、取り出し成功(DBT_DEVICEREMOVECOMPLETE)となる。
閉じる前の部分に独自の処理、例えば使用中のアプリを終了する処理などを書いておく。
挿した時、

こうなる
こうなる

こうなる。
バイス取り出しで、

こうなる
こうなる

こうなる。
DBT_DEVICEQUERYREMOVEのDBT_DEVTYP_HANDLEに来てるのがわかる。
ここで、ディレクトリハンドルを閉じている。

Sample/winapi/DBT_DEVICEQUERYREMOVE/DBT_DEVICEQUERYREMOVE/src/DBT_DEVICEQUERYREMOVE at master · bg1bgst333/Sample · GitHub