当前位置: 首页>>代码示例>>C++>>正文


C++ PDOKAN_OPERATIONS::GetVolumeInformation方法代码示例

本文整理汇总了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;
}
开发者ID:Liryna,项目名称:dokany,代码行数:73,代码来源:volume.c

示例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;
}
开发者ID:joepperkins,项目名称:dokany,代码行数:68,代码来源:volume.c


注:本文中的PDOKAN_OPERATIONS::GetVolumeInformation方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。