Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.032 c
6-1086197510
Игорь
2004-06-02 21:31
2004.08.01
Компонеты FastNet


1-1090320882
Kost
2004-07-20 14:54
2004.08.01
Передача string в dll


8-1084647905
Agent[007]
2004-05-15 23:05
2004.08.01
MP3 в API


6-1085758756
kalishenko
2004-05-28 19:39
2004.08.01
Неблокирующий режим в сокетах


3-1089360624
Pioneer
2004-07-09 12:10
2004.08.01
Пустая дата





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский