есть такая функция апишная - GetLogicalDriveStrings:
DWORD GetLogicalDriveStrings(IN DWORD nBufferLength, OUT LPSTR lpBuffer)ж
в lpBuffer пишет строку, в которой перечислены все диски в системе в виде ":\\", разделённые нулевыми символами, в конце строки - два нуля. nBufferLength - понятно длина буфера. возвращает реально записанное вв lpBuffer кол-во байт.
втыкаешь её в таймер, и, например, раз в секунду сравниваешь предыдущий список дисков с новым.