FSCTL_LOCK_VOLUME DeviceIoControl 操作将锁定卷。只能通过锁定卷的文件对象(* 【hDevice】)的句柄来访问锁定卷。
dwIoControlCode = FSCTL_LOCK_VOLUME; //操作代码
lpInBuffer = NULL; //指向输入缓冲区的指针;不曾用过;必须为NULL
nInBufferSize = 0; //输入缓冲区的大小不曾用过;必须为零
lpOutBuffer ; //指向输出缓冲区的指针;不曾用过;必须为NULL
nOutBufferSize ; //输出缓冲区的大小不曾用过;必须为零
lpBytesReturned ; //指向由DeviceIoControl函数使用的DWORD的指针
参数
【lpInBuffer】
指向输入缓冲区。不用于此操作。设置为NULL。
【nInBufferSize】
指定【lpInBuffer】指向的缓冲区的大小(以字节为单位)。不用于此操作。设置为零。
【lpOutBuffer】
指向输出缓冲区。不用于此操作。设置为NULL。
【nOutBufferSize】
指定【lpOutBuffer】指向的缓冲区的大小(以字节为单位)。不用于此操作。设置为零。
【lpBytesReturned】
指向DWORD.此值不能为NULL。尽管FSCTL_LOCK_VOLUME操作不产生输出数据,【lpOutBuffer】应为NULL,但DeviceIoControl函数使用【lpBytesReturned】指向的变量。操作后,该变量的值没有意义。
返回值
如果操作成功,DeviceIoControl返回TRUE。
如果操作失败,DeviceIoControl返回FALSE。要获取扩展错误信息,请调用GetLastError.
备注
传递给DeviceIoControl的【hDevice】句柄必须是一个卷的句柄,为直接访问打开。应用程序可以通过调用CreateFile 【lpFileName】设置为如下所示的字符串来获取这样一个句柄:
\\.\X:
其中X是硬盘驱动器分区字母,软盘驱动器或CD-ROM驱动器。应用程序还必须在CreateFile的【dwShareMode】参数中指定FILE_SHARE_READ和FILE_SHARE_WRITE标志。
如果卷上有任何打开的文件,则FSCTL_LOCK_VOLUME操作将失败。相反,此操作的成功表明没有打开的文件。
该操作对于需要在一段时间内独占访问卷(例如磁盘实用程序)的应用程序是有用的。
锁定的卷保持锁定,直到发生以下情况之一:
*应用程序调用{??989796074} DeviceIoControl操作来解锁该卷。
*手柄直接通过CloseHandle关闭,或者当进程终止时间外关闭。
在锁定之前,系统会将所有缓存的数据刷新到卷上。例如,保存在延迟写入缓存中的任何数据都将写入卷中。
也可以看看
CloseHandle, CreateFile, DeviceIoControl, FSCTL_UNLOCK_VOLUME