Rechte für Schreib- und Lesezugriff auf gesperrten Datenträger
-
Hallo,
habe folgendes Problem:
Habe Datenträger zuerst geöffnet damit ich ein Handle auf ihn bekomme:HANDLE OpenVolume(TCHAR cDriveLetter)
{
HANDLE hVolume;
UINT uDriveType;
char szVolumeName[8];
char szRootName[5];
DWORD dwAccessFlags;sprintf(szRootName, "%c:\", cDriveLetter);
uDriveType = GetDriveType(szRootName);
switch(uDriveType) {
case DRIVE_REMOVABLE:
dwAccessFlags = GENERIC_READ | GENERIC_WRITE;
break;
case DRIVE_CDROM:
dwAccessFlags = GENERIC_READ;
break;
default:
printf("Cannot eject. Drive type is incorrect.\n");
return INVALID_HANDLE_VALUE;
}sprintf(szVolumeName, "\\\.\%c:", cDriveLetter);
hVolume = CreateFile( szVolumeName,
dwAccessFlags,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0,
NULL );if (hVolume == INVALID_HANDLE_VALUE)
printf("CreateFile error %d\n", GetLastError());
return hVolume;
}Dann hab ich mit diesem Handle den Datenträger gelockt:
BOOL LockVolume(HANDLE hVolume)
{
DWORD dwBytesReturned;
DWORD dwSleepAmount;
int nTryCount;dwSleepAmount = LOCK_TIMEOUT / LOCK_RETRIES;
// Do this in a loop until a timeout period has expired
for (nTryCount = 0; nTryCount < LOCK_RETRIES; nTryCount++) {
if (DeviceIoControl(hVolume,
FSCTL_LOCK_VOLUME,
NULL, 0,
NULL, 0,
&dwBytesReturned,
NULL))
return TRUE;Sleep(dwSleepAmount);
}
return FALSE;
}Der Code ist aus der WFC. Wie kann ich nun eine beliebige Datei auf dem Datenträger lesen? OpenFile() und CreateFile() bringen: Zugriff verweigert als Fehlermeldung, was ja eigentlich auch klar ist. Nur, wie kann ich mit dem Handle auf den Datenträger letzendlich zugreifen und die Rechte meinem Programm geben?

-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Wenn du nur eine datei öffnen willst, warum öffnest du den Datenträger physikalisch? OpenFile und CreateFile gehen bestimmt, wenn der Datenträger schreibgeschützt ist, darfst du die Datei eben nur mit GENERIC_READ öffnen mit CreateFile zum Beispiel.
-
Problem ist, ich muss den Datenträger sperren. Somit kann ich andere Zugriffe, z.B. aus dem Explorer, ausschalten. Leider sperr ich mich damit eben auch selber aus.
Zudem muss ich den Datenträger noch formatieren, Daten draufschreiben...