Pode ser que ele não esteja liberando o Handle alocado; se não for isso, realmente não sei o que possa ser. Tente assim: Abrir: const IOCTL_Storage_Eject_Media = $002D4808;
var hDevice:THandle; dRet:DWord;
begin
HDevice := CreateFile(PChar('\\.\G:'),
Generic_Read,
File_Share_Read,
nil,
Open_Existing,
0,
0);
DeviceIoControl(hDevice, IOCTL_Storage_Eject_Media, nil, 0, nil, 0, dRet, nil);
CloseHandle(hDevice);
end;
Fechar:const IOCTL_Storage_Load_Media = $002D480C;
var hDevice:THandle; dRet:DWord;
begin
HDevice := CreateFile(PChar('\\.\G:'),
Generic_Read,
File_Share_Read,
nil,
Open_Existing,
0,
0);
DeviceIoControl(hDevice, IOCTL_Storage_Load_Media, nil, 0, nil, 0, dRet, nil);
CloseHandle(hDevice);
end;