Форум: "WinAPI";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];
ВнизCreateFile для привода CD Найти похожие ветки
← →
Users (2004-06-21 14:34) [0]Имеется CD на D:, пытаюсь получить на него Handle:
hDrive:=CreateFile("\\.\D:", GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ, Nil, OPEN_EXISTING, 0, 0);
получаем INVALID_HANDLE_VALUE
причем диск точно есть ! Система XP, права администратора.
Может проблема из за LPSECURITY_ATTRIBUTES - они выставлены в nil.
← →
Игорь Шевченко © (2004-06-21 14:39) [1]Что говорит GetLastError ?
(И маленький такой вопрос - зачем GENERIC_WRITE для CD ?)
← →
Users (2004-06-21 14:52) [2]SysErrorMessage(GetLastError) говорит что :
"процесс не может получить доступ к файлу, т.к. этот файл занят другим процессом". Такое впеч-е, что блокирует что то :( хотя не понятно что, попробую перезагрузить машину.
GENERIC_WRITE - прочитал, что это нужно для доступа к CD для Win2000 и выше.
← →
Anatoly Podgoretsky © (2004-06-21 14:59) [3]GENERIC_WRITE это запись, что ты собираешься писать на CD
← →
Users (2004-06-21 15:22) [4]по поводу GENERIC_WRITE :
Вот что написано в оригинале :
/*
* Universal function to get a file handle to the CD device. Since
* NT 4.0 wants just the GENERIC_READ flag, and Win2K wants both
* GENERIC_READ and GENERIC_WRITE (why a read-only CD device needs
* GENERIC_WRITE access is beyond me...), the easist workaround is to just
* try them both.
*/
http://cvs.sourceforge.net/viewcvs.py/cdexos/cdexos/CDRip/NTScsi.cpp?rev=1.15
← →
Игорь Шевченко © (2004-06-21 16:07) [5]А попробовать убрать GENERIC_WRITE - ситуация изменится ?
Потому как такой код прекрасно открывает:unit main;
interface
uses
Windows, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TfMain = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
FCDRom: THandle;
end;
var
fMain: TfMain;
implementation
{$R *.DFM}
procedure TfMain.FormCreate(Sender: TObject);
begin
FCDRom := CreateFile("\\.\H:", GENERIC_READ, FILE_SHARE_READ, nil,
OPEN_EXISTING, 0, 0);
if FCDRom = INVALID_HANDLE_VALUE then
RaiseLastWin32Error;
ShowMessageFmt("CD_ROM opened, its handle is %.8x", [FCDRom]);
end;
procedure TfMain.FormDestroy(Sender: TObject);
begin
CloseHandle(FCDRom);
end;
end.
← →
Игорь Шевченко © (2004-06-21 16:08) [6]Справедливости ради надо сказать, что с GENERIC_WRITE тоже открывает, когда диска в устройстве нет.
← →
Users (2004-06-21 19:13) [7]GENERIC_WRITE - нужен только для XP,2000. А так проверял, заработало.
← →
Users (2004-06-21 19:21) [8]Кстати, еще была проблема :
если загружена библиотка WNASPI32.DLL - она создает монопольный доступ к CD.
← →
Alex Konshin © (2004-06-22 07:56) [9]А диск SCSI?
Посмотри исходники на http://akrip.sourceforge.net/
Возможно ничего и писать не придется.
← →
Users (2004-06-22 13:07) [10]Нет диск обычный IDE.
В общем я с этой проблемой разобрался:
Если грузим библиотеку WNASPI32.DLL, т.е. хотим пользоваться ASPI интерфейсом, или какая либо др. программа ее использует - нет возможности использовать STPI - CreateFile возвращает ошибку - блокировка др. процессом.
По этому нужно использовать ASPI или STPI интерфейс.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.033 c