本文整理汇总了C++中PDOKAN_OPERATIONS::GetVolumeInformation方法的典型用法代码示例。如果您正苦于以下问题:C++ PDOKAN_OPERATIONS::GetVolumeInformation方法的具体用法?C++ PDOKAN_OPERATIONS::GetVolumeInformation怎么用?C++ PDOKAN_OPERATIONS::GetVolumeInformation使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类PDOKAN_OPERATIONS
的用法示例。
在下文中一共展示了PDOKAN_OPERATIONS::GetVolumeInformation方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: RtlZeroMemory
NTSTATUS
DokanFsVolumeInformation(PEVENT_INFORMATION EventInfo,
PEVENT_CONTEXT EventContext, PDOKAN_FILE_INFO FileInfo,
PDOKAN_OPERATIONS DokanOperations) {
WCHAR volumeName[MAX_PATH];
DWORD volumeSerial = 0;
DWORD maxComLength = 0;
DWORD fsFlags = 0;
WCHAR fsName[MAX_PATH];
ULONG remainingLength;
ULONG bytesToCopy;
NTSTATUS status = STATUS_NOT_IMPLEMENTED;
PFILE_FS_VOLUME_INFORMATION volumeInfo =
(PFILE_FS_VOLUME_INFORMATION)EventInfo->Buffer;
remainingLength = EventContext->Operation.Volume.BufferLength;
if (remainingLength < sizeof(FILE_FS_VOLUME_INFORMATION)) {
return STATUS_BUFFER_OVERFLOW;
}
RtlZeroMemory(volumeName, sizeof(volumeName));
RtlZeroMemory(fsName, sizeof(fsName));
if (DokanOperations->GetVolumeInformation) {
status = DokanOperations->GetVolumeInformation(
volumeName, // VolumeNameBuffer
sizeof(volumeName) / sizeof(WCHAR), // VolumeNameSize
&volumeSerial, // VolumeSerialNumber
&maxComLength, // MaximumComponentLength
&fsFlags, // FileSystemFlags
fsName, // FileSystemNameBuffer
sizeof(fsName) / sizeof(WCHAR), // FileSystemNameSize
FileInfo);
}
if (status == STATUS_NOT_IMPLEMENTED) {
status = DokanGetVolumeInformation(
volumeName, // VolumeNameBuffer
sizeof(volumeName) / sizeof(WCHAR), // VolumeNameSize
&volumeSerial, // VolumeSerialNumber
&maxComLength, // MaximumComponentLength
&fsFlags, // FileSystemFlags
fsName, // FileSystemNameBuffer
sizeof(fsName) / sizeof(WCHAR), // FileSystemNameSize
FileInfo);
}
if (status != STATUS_SUCCESS) {
return status;
}
volumeInfo->VolumeCreationTime.QuadPart = 0;
volumeInfo->VolumeSerialNumber = volumeSerial;
volumeInfo->SupportsObjects = FALSE;
remainingLength -= FIELD_OFFSET(FILE_FS_VOLUME_INFORMATION, VolumeLabel[0]);
bytesToCopy = (ULONG)wcslen(volumeName) * sizeof(WCHAR);
if (remainingLength < bytesToCopy) {
bytesToCopy = remainingLength;
}
volumeInfo->VolumeLabelLength = bytesToCopy;
RtlCopyMemory(volumeInfo->VolumeLabel, volumeName, bytesToCopy);
remainingLength -= bytesToCopy;
EventInfo->BufferLength =
EventContext->Operation.Volume.BufferLength - remainingLength;
return STATUS_SUCCESS;
}
示例2: sizeof
ULONG
DokanFsAttributeInformation(
PEVENT_INFORMATION EventInfo,
PEVENT_CONTEXT EventContext,
PDOKAN_FILE_INFO FileInfo,
PDOKAN_OPERATIONS DokanOperations)
{
WCHAR volumeName[MAX_PATH];
DWORD volumeSerial;
DWORD maxComLength;
DWORD fsFlags;
WCHAR fsName[MAX_PATH];
ULONG remainingLength;
ULONG bytesToCopy;
int status = -1;
PFILE_FS_ATTRIBUTE_INFORMATION attrInfo =
(PFILE_FS_ATTRIBUTE_INFORMATION)EventInfo->Buffer;
if (!DokanOperations->GetVolumeInformation) {
DokanOperations->GetVolumeInformation = DokanGetVolumeInformation;
//return STATUS_NOT_IMPLEMENTED;
}
remainingLength = EventContext->Operation.Volume.BufferLength;
if (remainingLength < sizeof(FILE_FS_ATTRIBUTE_INFORMATION)) {
return STATUS_BUFFER_OVERFLOW;
}
RtlZeroMemory(volumeName, sizeof(volumeName));
RtlZeroMemory(fsName, sizeof(fsName));
status = DokanOperations->GetVolumeInformation(
volumeName, // VolumeNameBuffer
sizeof(volumeName) / sizeof(WCHAR), // VolumeNameSize
&volumeSerial, // VolumeSerialNumber
&maxComLength, // MaximumComponentLength
&fsFlags, // FileSystemFlags
fsName, // FileSystemNameBuffer
sizeof(fsName) / sizeof(WCHAR), // FileSystemNameSize
FileInfo);
if (status < 0) {
return STATUS_INVALID_PARAMETER;
}
attrInfo->FileSystemAttributes = fsFlags;
attrInfo->MaximumComponentNameLength = maxComLength;
remainingLength -= FIELD_OFFSET(FILE_FS_ATTRIBUTE_INFORMATION, FileSystemName[0]);
bytesToCopy = (ULONG)wcslen(fsName) * sizeof(WCHAR);
if (remainingLength < bytesToCopy) {
bytesToCopy = remainingLength;
}
attrInfo->FileSystemNameLength = bytesToCopy;
RtlCopyMemory(attrInfo->FileSystemName, fsName, bytesToCopy);
remainingLength -= bytesToCopy;
EventInfo->BufferLength = EventContext->Operation.Volume.BufferLength - remainingLength;
return STATUS_SUCCESS;
}