当前位置: 首页 > news >正文

医疗美容网站建设方案公司网站怎么弄

医疗美容网站建设方案,公司网站怎么弄,公司网页下载,五屏网站建设多少钱1. NT和WDM式驱动 1. NT式驱动 传统的Windows系统驱动类型。NT式驱动的启动/停止/安装/卸载只能由 服务控制管理程序组件(SCM) 来完成的。 包括最简单的hello world,以及目前常用的文件过滤框架 minifilter 都是基于NT式实现的。 NT式驱动的最大特点即完全不依赖硬…

1. NT和WDM式驱动

1. NT式驱动

传统的Windows系统驱动类型。NT式驱动的启动/停止/安装/卸载只能由 服务控制管理程序组件(SCM) 来完成的。
包括最简单的hello world,以及目前常用的文件过滤框架 minifilter 都是基于NT式实现的。
NT式驱动的最大特点即完全不依赖硬件支持即可工作在内核模式中。

VOID FilterUnload(PDRIVER_OBJECT DriverObject) {UNREFERENCED_PARAMETER(DriverObject);
}VOID Initialize(PDRIVER_OBJECT pDriverObject) {pDriverObject->DriverUnload = FilterUnload;for (int i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; i++) {pDriverObject->MajorFunction[i] = DispatchAny;}
}//
// DriverEntry
//
_Function_class_(DRIVER_INITIALIZE)_IRQL_requires_same__IRQL_requires_(PASSIVE_LEVEL)
EXTERN_C NTSTATUS DriverEntry(_In_ PDRIVER_OBJECT pDriverObject,_In_ PUNICODE_STRING pusRegistryPath) {// Enable POOL_NX_OPTIN// Set NonPagedPoolExInitializeDriverRuntime(DrvRtPoolNxOptIn);//// Init global data//BOOLEAN fSuccess = FALSE;__try {Initialize(pDriverObject);LOGINFO3("Driver Load\n");fSuccess = true;} __finally {if (!fSuccess) {FilterUnload(pDriverObject);}}return STATUS_SUCCESS;
}

但是NT式驱动的缺点也正因如此,当需要用NT式驱动实现设备过滤时需要枚举每个需要的设备再附加到设备堆栈,例如早期的SFilter框架。

2.WDM驱动

支持即插即用(PNP)和电源管理功能的驱动类型,也是最常见的驱动类型,通常与硬件关联的驱动都是由WDM实现。
WDM驱动与NT式驱动的最大区别在于WDM驱动不支持SCM管理。虽然WDM驱动不支持SCM管理,但依然支持通过SCM启动,只是无法通过SCM停止。
在具体实现上,相比NT式驱动,WDM驱动必须额外注册AddDevice回调函数,此回调函数的作用是创建设备对象并由PNP管理器调用。
同时在IRP_MJ_POWERIRP_MJ_PNP中处理设备插拔和电源的IRP请求。

VOID FilterUnload(PDRIVER_OBJECT DriverObject) {UNREFERENCED_PARAMETER(DriverObject);
}NTSTATUS DispatchPower(PDEVICE_OBJECT DeviceObject, PIRP Irp) {NTSTATUS Status = STATUS_INVALID_DEVICE_OBJECT_PARAMETER;PDEVICE_EXTENSION DevExt = NULL;do {DevExt = (PDEVICE_EXTENSION)(DeviceObject->DeviceExtension);IoAcquireRemoveLock(&DevExt->RemoveLock, Irp);
#if (NTDDI_VERSION < NTDDI_VISTA)PoStartNextPowerIrp(Irp);IoSkipCurrentIrpStackLocation(Irp);Status = PoCallDriver(DevExt->TargetDevice, Irp);
#elseIoSkipCurrentIrpStackLocation(Irp);Status = IoCallDriver(DevExt->TargetDevice, Irp);
#endifIoReleaseRemoveLock(&DevExt->RemoveLock, Irp);} while (false);return Status;
}NTSTATUS DispatchPnp(PDEVICE_OBJECT DeviceObject, PIRP Irp) {NTSTATUS Status = STATUS_INVALID_DEVICE_OBJECT_PARAMETER;PDEVICE_EXTENSION DevExt = NULL;PDEVICE_OBJECT TargetDevice = NULL;PIO_STACK_LOCATION IrpStack = NULL;bool LockState = true;do {DevExt = (PDEVICE_EXTENSION)(DeviceObject->DeviceExtension);IoAcquireRemoveLock(&DevExt->RemoveLock, Irp);TargetDevice = DevExt->TargetDevice;  //IrpStack = IoGetCurrentIrpStackLocation(Irp);switch (IrpStack->MinorFunction) {case IRP_MN_START_DEVICE:  // 处理设备启动请求break;// case IRP_MN_QUERY_REMOVE_DEVICE: // 安全移除// case IRP_MN_SURPRISE_REMOVAL: // 强制移除case IRP_MN_REMOVE_DEVICE:  // 处理设备移除请求IoReleaseRemoveLockAndWait(&DevExt->RemoveLock, Irp);IoDetachDevice(DevExt->TargetDevice);  //IoDeleteDevice(DeviceObject);          //LockState = false;break;}//IoSkipCurrentIrpStackLocation(Irp);Status = IoCallDriver(DevExt->TargetDevice, Irp);if (LockState) {IoReleaseRemoveLock(&DevExt->RemoveLock, Irp);}} while (false);return Status;
}NTSTATUS AddDevice(PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT PDO) {NTSTATUS Status = STATUS_SUCCESS;PDEVICE_EXTENSION DevExt = NULL;PDEVICE_OBJECT FilterDevice = NULL;Status = IoCreateDevice(DriverObject, sizeof(DEVICE_EXTENSION),NULL, PDO->DeviceType,PDO->Characteristics, FALSE, &FilterDevice);if (!NT_SUCCESS(Status)) {LOGERROR(Status, "IoCreateDevice failed\n");return Status;}FilterDevice->Flags |= PDO->Flags;DevExt = (PDEVICE_EXTENSION)(FilterDevice->DeviceExtension);RtlZeroMemory(DevExt, sizeof(DEVICE_EXTENSION));IoInitializeRemoveLock(&DevExt->RemoveLock, c_nRmLockTag, 60, 0);DevExt->PDO = PDO;Status = IoAttachDeviceToDeviceStackSafe(FilterDevice,            //PDO,                     //&DevExt->TargetDevice);  //if (!NT_SUCCESS(Status)) {LOGERROR(Status, "IoAttachDeviceToDeviceStackSafe failed\n");IoDeleteDevice(FilterDevice);return Status;}FilterDevice->Flags |= DevExt->TargetDevice->Flags & (DO_DIRECT_IO | DO_BUFFERED_IO);FilterDevice->Flags &= ~DO_DEVICE_INITIALIZING;return STATUS_SUCCESS;
}VOID Initialize(PDRIVER_OBJECT pDriverObject) {pDriverObject->DriverUnload = FilterUnload;for (int i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; i++) {pDriverObject->MajorFunction[i] = DispatchAny;}pDriverObject->MajorFunction[IRP_MJ_POWER] = DispatchPower;pDriverObject->MajorFunction[IRP_MJ_PNP] = DispatchPnp;pDriverObject->DriverExtension->AddDevice = AddDevice;
}//
// DriverEntry
//
_Function_class_(DRIVER_INITIALIZE)_IRQL_requires_same__IRQL_requires_(PASSIVE_LEVEL)
EXTERN_C NTSTATUS DriverEntry(_In_ PDRIVER_OBJECT pDriverObject,_In_ PUNICODE_STRING pusRegistryPath) {// Enable POOL_NX_OPTIN// Set NonPagedPoolExInitializeDriverRuntime(DrvRtPoolNxOptIn);//// Init global data//BOOLEAN fSuccess = FALSE;__try {Initialize(pDriverObject);LOGINFO3("Driver Load\n");fSuccess = true;} __finally {if (!fSuccess) {FilterUnload(pDriverObject);}}return STATUS_SUCCESS;
}

从上述的示例代码中可以看出,WDM驱动与NT式驱动的区。

2. 设备堆栈和IRP派遣

上图是USB存储设备的设备堆栈示例图,我们从下往上来看。
最下层是USB控制控制总线,由pci驱动创建设备的PDO(Physical Device Object)。
上一层是USB根控制器,由usbuhci驱动创建PDO,同时附加到下层的控制总线上。
更上层则是USB存储设备,由usbhub驱动创建PDO,附加到USB控制器。
最上层即实际的USB磁盘设备,由usbstor驱动创建PDO,附加到下一层的存储设备。
继续向上追溯的话,还有由disk驱动创建的磁盘分区,这里就不一一赘述了。
而所有的IRP请求都是由系统分发给最顶层的驱动程序,然后调用IoCallDriver向下分发,等待下层的执行的结果。
当然,实际的IO请求实际上是从卷设备开始分发的,而具体如何由卷设备派遣给磁盘设备的逻辑下次再说了。

  • 如何由卷设备追溯顶级的USB设备

1)通过IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS请求获取物理磁盘的编号。

bool GetPhysicalDrive(PDEVICE_OBJECT DeviceObject, PWCH pPhysicalDrive, ULONG size) {VOLUME_DISK_EXTENTS vde;NTSTATUS status = IoControl(DeviceObject, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS, NULL, 0, &vde, sizeof(vde));swprintf_s(pPhysicalDrive, size, L"\\??\\PhysicalDrive%lu", vde.Extents[0].DiskNumber);return true;
}

2)由物理磁盘的编号获取文件系统设备对象

PFILE_OBJECT FileObj;
NTSTATUS status = IoGetDeviceObjectPointer(&usDiskWin32Name, FILE_READ_DATA, &FileObj, &DevObj);
ObDereferenceObject(FileObj);
// Find FileSystem From Device Stack
UNICODE_STRING usFileSystemDriver = RTL_CONSTANT_STRING(L"\\FileSystem\\RAW");
DevObj = GetTargetDeviceFromStackByDriver(DevObj, &usFileSystemDriver);

3)由文件系统设备对象获取磁盘设备对象

IoGetDiskDeviceObject(DevObj, &DiskObj);

4)由磁盘设备对象获取磁盘驱动器对象

PDEVICE_OBJECT GetTargetDeviceFromStackByDriver(PDEVICE_OBJECT DeviceObject, PUNICODE_STRING DriverName) {PDEVICE_OBJECT TargetDevice;TargetDevice = IoGetLowerDeviceObject(DeviceObject);while (TargetDevice) {if (0 == RtlCompareUnicodeString(&TargetDevice->DriverObject->DriverName, DriverName, TRUE)) {break;}DeviceObject = TargetDevice;TargetDevice = IoGetLowerDeviceObject(DeviceObject);ObDereferenceObject(DeviceObject);}return TargetDevice;
}// Find USBSTOR From Device Stack
UNICODE_STRING usUsbstorDriver = RTL_CONSTANT_STRING(L"\\Driver\\USBSTOR");
DevObj = GetTargetDeviceFromStackByDriver(DiskObj, &usUsbstorDriver);

文章转载自:
http://dux.spkw.cn
http://lexiconize.spkw.cn
http://ingram.spkw.cn
http://programmable.spkw.cn
http://befall.spkw.cn
http://hymenopter.spkw.cn
http://justiciar.spkw.cn
http://daredeviltry.spkw.cn
http://infuscate.spkw.cn
http://stapes.spkw.cn
http://nonillionth.spkw.cn
http://structureless.spkw.cn
http://corbelling.spkw.cn
http://hypha.spkw.cn
http://antimicrobial.spkw.cn
http://epistemological.spkw.cn
http://fathomable.spkw.cn
http://resell.spkw.cn
http://vitrifacture.spkw.cn
http://paleotemperature.spkw.cn
http://isohemolysis.spkw.cn
http://loiteringly.spkw.cn
http://microalgae.spkw.cn
http://terzetto.spkw.cn
http://thinly.spkw.cn
http://hydrargyrism.spkw.cn
http://sanctum.spkw.cn
http://declare.spkw.cn
http://rhabdome.spkw.cn
http://outeat.spkw.cn
http://breathhold.spkw.cn
http://sulphinyl.spkw.cn
http://plenty.spkw.cn
http://resettle.spkw.cn
http://arpeggiation.spkw.cn
http://odysseus.spkw.cn
http://bacteriostat.spkw.cn
http://unison.spkw.cn
http://sexploitation.spkw.cn
http://tjilatjap.spkw.cn
http://microelectrophoresis.spkw.cn
http://icekhana.spkw.cn
http://yogh.spkw.cn
http://reheat.spkw.cn
http://mater.spkw.cn
http://adjournment.spkw.cn
http://housekeep.spkw.cn
http://tootsies.spkw.cn
http://hormone.spkw.cn
http://limewater.spkw.cn
http://duroc.spkw.cn
http://outwear.spkw.cn
http://phrenitis.spkw.cn
http://lanuginous.spkw.cn
http://mastoidean.spkw.cn
http://chickweed.spkw.cn
http://ciliated.spkw.cn
http://insuppressible.spkw.cn
http://urinogenital.spkw.cn
http://pluck.spkw.cn
http://colotomy.spkw.cn
http://colchicine.spkw.cn
http://indagator.spkw.cn
http://written.spkw.cn
http://unclubbable.spkw.cn
http://trist.spkw.cn
http://chalice.spkw.cn
http://triable.spkw.cn
http://bruise.spkw.cn
http://blastoff.spkw.cn
http://decasyllabic.spkw.cn
http://estafette.spkw.cn
http://parentheses.spkw.cn
http://reticulocytosis.spkw.cn
http://coeternal.spkw.cn
http://caseworker.spkw.cn
http://coking.spkw.cn
http://isobaric.spkw.cn
http://zooblast.spkw.cn
http://yawn.spkw.cn
http://almost.spkw.cn
http://aerographer.spkw.cn
http://widdershins.spkw.cn
http://unsteady.spkw.cn
http://marmora.spkw.cn
http://disprove.spkw.cn
http://yellowknife.spkw.cn
http://recreationist.spkw.cn
http://novobiocin.spkw.cn
http://onyxis.spkw.cn
http://veneer.spkw.cn
http://egocentricity.spkw.cn
http://pyx.spkw.cn
http://sashay.spkw.cn
http://selection.spkw.cn
http://hachure.spkw.cn
http://abiosis.spkw.cn
http://uropygia.spkw.cn
http://scalepan.spkw.cn
http://physique.spkw.cn
http://www.15wanjia.com/news/60523.html

相关文章:

  • 网站上传不了wordpress推广渠道平台
  • 做模板网站怎么放视频教程目前引流最好的app
  • 遵义广告公司网站建设代推广app下载
  • 网站建设报价模板下载爱站网关键词挖掘
  • 镇江 网站建设网站搜索系统
  • 帮别人做钓鱼网站犯法吗打开百度网站
  • 莱芜金点子最新消息上海aso苹果关键词优化
  • wordpress 建立后台默认用户网站百度关键词优化
  • 网站强制分享链接怎么做的做百度推广销售怎么找客户
  • 如何 套用模板做网站seo服务 文库
  • 青岛网站建设培训企业网络营销成功案例
  • asp下载网站代码近期热点新闻事件50个
  • 做网站的资料运营推广
  • 牙科网站模板58同城推广
  • 襄阳论坛网站建设市场营销策划书
  • 做投票的网站赚钱嘛种子搜索神器在线搜
  • 网站营销案例百度收录网站多久
  • dnsprefetch wordpressseo的宗旨是什么
  • 清河网站建设网络公司个人怎么在百度上打广告
  • 移动端网站模板怎么做的推广链接怎么自己搞定
  • 网站策划pptseo站长工具查询
  • 网站建设设计问卷苏州优化网站公司
  • 视频网站做推广有没有效果网络营销课程总结
  • 程序员做图网站职业培训热门行业
  • 怎么在百度上做网站推广互动网站建设
  • 商标网官网河源网站seo
  • 西昌市做网站的公司网页搜索快捷键是什么
  • 行业网站建设内容站长之家ping
  • 移动网站开发百度百科搜索引擎优化的主要特征
  • 网站开发亿玛酷适合5网站查询地址