Reputation: 976
When I write to a disk device or a drive, sometimes I get an access denied error:
HANDLE hd=CreateFile("\\\\.\\PhysicalDrive1",GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE, NULL,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,NULL);
//HANDLE hd=CreateFile("\\\\.\\C:",GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE, NULL,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,NULL);
WriteFile(hd,...);
The error persists even after I dismount the volume:
HANDLE hd=CreateFile("\\\\.\\PhysicalDrive1",GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE, NULL,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,NULL);
//HANDLE hd=CreateFile("\\\\.\\C:",GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE, NULL,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,NULL);
DeviceIoControl(hd,FSCTL_DISMOUNT_VOLUME,NULL,NULL,NULL,NULL,NULL,NULL);
WriteFile(hd,...);
I encountered this problem in Windows Disk Management when I tried to format a volume or delete a volume. Disk Management will show a dialog saying some process is accessing that volume and if I want to proceed. If I choose yes, the formatting or deletion can be performed without problem. I want to know how I can achieve the same in code, i.e., what API I should use to gain the write access.
Upvotes: 0
Views: 64