驱动获取对应卷所在的实例

函数

//得到对应卷的实例
 
PFLT_INSTANCE 
  XBFltGetVolumeInstance(
  IN PFLT_FILTER		pFilter,
  IN PUNICODE_STRING	pVolumeName
  )
{
  NTSTATUS		status;
  PFLT_INSTANCE	pInstance = NULL;
  PFLT_VOLUME		pVolumeList[MAX_VOLUME_CHARS];
  BOOLEAN			bDone = FALSE;
  ULONG			uRet;
  UNICODE_STRING	uniName ={0};
  ULONG 			index = 0;
  WCHAR			wszNameBuffer[MAX_PATH] = {0};
 
  status = FltEnumerateVolumes(pFilter,
    NULL,
    0,
    &uRet);
  if(status != STATUS_BUFFER_TOO_SMALL)
  {
    return NULL;
  }
 
  status = FltEnumerateVolumes(pFilter,
    pVolumeList,
    uRet,
    &uRet);
 
  if(!NT_SUCCESS(status))
  {
 
    return NULL;
  }
  uniName.Buffer = wszNameBuffer;
 
  if (uniName.Buffer == NULL)
  {
    for (index = 0;index< uRet; index++)
      FltObjectDereference(pVolumeList[index]);
 
    return NULL;
  }
 
  uniName.MaximumLength = MAX_PATH*sizeof(WCHAR);
 
  for (index = 0; index < uRet; index++)
  {
    uniName.Length = 0;
 
    status = FltGetVolumeName( pVolumeList[index],
      &uniName,
      NULL);
 
    if(!NT_SUCCESS(status))
      continue;
 
    if(RtlCompareUnicodeString(&uniName,
      pVolumeName,
      TRUE) != 0)
      continue;
 
    status = FltGetVolumeInstanceFromName(pFilter,
      pVolumeList[index],
      NULL,
      &pInstance);
 
    if(NT_SUCCESS(status))
    {
      FltObjectDereference(pInstance);
      break;
    }
  }
 
  for (index = 0;index< uRet; index++)
    FltObjectDereference(pVolumeList[index]);
  return pInstance;
}
 

以下是怎么使用

 //获得文件所在盘的实例
 PFLT_INSTANCE fileInstance = NULL;
 UNICODE_STRING  pVolumeNamec;
 RtlInitUnicodeString(&pVolumeNamec, L"\\Device\\HarddiskVolume2");//所在的卷
 fileInstance = XBFltGetVolumeInstance(gFilterHandle,	&pVolumeNamec);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值