- #include <ntddk.h>
- #include "ioctl.h"
- #include "wintypes.h"
- //---------------------------------------------------------------------------
- #ifdef _DEBUG
- #define DbgPrint(_string) {DbgPrint _string;}
- #else
- #define DbgPrint(_string)
- #endif
- //---------------------------------------------------------------------------
- NTSTATUS
- IoCompletionRoutine(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp,
- IN PVOID Context
- )
- {
- DbgPrint(("IoCompletionRoutine!/n"));
- *Irp->UserIosb = Irp->IoStatus;
- if (Irp->UserEvent)
- KeSetEvent(Irp->UserEvent, IO_NO_INCREMENT, 0);
- if (Irp->MdlAddress)
- {
- IoFreeMdl(Irp->MdlAddress);
- Irp->MdlAddress = NULL;
- }
- IoFreeIrp(Irp);
- return STATUS_MORE_PROCESSING_REQUIRED;
- }
- NTSTATUS
- IrpFileCreate(
- IN PUNICODE_STRING FileName,
- IN ACCESS_MASK DesiredAccess,
- IN ULONG FileAttributes,
- IN ULONG ShareAccess,
- IN ULONG CreateDisposition,
- IN ULONG CreateOptions,
- IN PDEVICE_OBJECT DeviceObject,
- IN PDEVICE_OBJECT RealDevice,
- OUT PVOID *Object
- )
- {
- NTSTATUS status;
- KEVENT event;
- PIRP irp;
- IO_STATUS_BLOCK ioStatus;
- PIO_STACK_LOCATION irpSp;
- IO_SECURITY_CONTEXT securityContext;
- ACCESS_STATE accessState;
- OBJECT_ATTRIBUTES objectAttributes;
- PFILE_OBJECT fileObject;
- AUX_ACCESS_DATA auxData;
- RtlZeroMemory(&auxData, sizeof(AUX_ACCESS_DATA));
- KeInitializeEvent(&event, SynchronizationEvent, FALSE);
- irp = IoAllocateIrp(DeviceObject->StackSize, FALSE);
- if (irp == NULL)
- return STATUS_INSUFFICIENT_RESOURCES;
- InitializeObjectAttributes(&objectAttributes, NULL, OBJ_CASE_INSENSITIVE, 0, NULL);
- status = ObCreateObject(KernelMode,
- *IoFileObjectType,
- &objectAttributes,
- KernelMode,
- NULL,
- sizeof(FILE_OBJECT),
- 0,
- 0,
- (PVOID *)&fileObject);
- if (!NT_SUCCESS(status))
- {
- IoFreeIrp(irp);
- return status;
- }
- RtlZeroMemory(fileObject, sizeof(FILE_OBJECT));
- fileObject->Type = IO_TYPE_FILE;
- fileObject->Size = sizeof(FILE_OBJECT);
- fileObject->DeviceObject = RealDevice;
- // fileObject->RelatedFileObject = NULL;
- fileObject->Flags = FO_SYNCHRONOUS_IO;
- fileObject->FileName.MaximumLength = FileName->MaximumLength;
- fileObject->FileName.Buffer = ExAllocatePool(NonPagedPool, FileName->MaximumLength);
- if (fileObject->FileName.Buffer == NULL)
- {
- IoFreeIrp(irp);
- ObDereferenceObject(fileObject);
- return STATUS_INSUFFICIENT_RESOURCES;
- }
- RtlCopyUnicodeString(&fileObject->FileName, FileName);
- KeInitializeEvent(&fileObject->Lock, SynchronizationEvent, FALSE);
- KeInitializeEvent(&fileObject->Event, NotificationEvent, FALSE);
- irp->MdlAddress = NULL;
- irp->Flags |= IRP_CREATE_OPERATION | IRP_SYNCHRONOUS_API;
- irp->RequestorMode = KernelMode;
- irp->UserIosb = &ioStatus;
- irp->UserEvent = &event;
- irp->PendingReturned = FALSE;
- irp->Cancel = FALSE;
- irp->CancelRoutine = NULL;
- irp->Tail.Overlay.Thread = (PETHREAD)KeGetCurrentThread();
- irp->Tail.Overlay.AuxiliaryBuffer = NULL;
- irp->Tail.Overlay.OriginalFileObject = fileObject;
- status = SeCreateAccessState( &accessState,
- &auxData,
- DesiredAccess,
- IoGetFileObjectGenericMapping());
- if (!NT_SUCCESS(status))
- {
- IoFreeIrp(irp);
- ExFreePool(fileObject->FileName.Buffer);
- ObDereferenceObject(fileObject);
- return status;
- }
- securityContext.SecurityQos = NULL;
- securityContext.AccessState = &accessState;
- securityContext.DesiredAccess = DesiredAccess;
- securityContext.FullCreateOptions = 0;
- irpSp = IoGetNextIrpStackLocation(irp);
- irpSp->MajorFunction = IRP_MJ_CREATE;
- irpSp->DeviceObject = DeviceObject;
- irpSp->FileObject = fileObject;
- irpSp->Parameters.Create.SecurityContext = &securityContext;
- irpSp->Parameters.Create.Options = (CreateDisposition << 24) | CreateOptions;
- irpSp->Parameters.Create.FileAttributes = (USHORT)FileAttributes;
- irpSp->Parameters.Create.ShareAccess = (USHORT)ShareAccess;
- irpSp->Parameters.Create.EaLength = 0;
- IoSetCompletionRoutine(irp, IoCompletionRoutine, NULL, TRUE, TRUE, TRUE);
- status = IoCallDriver(DeviceObject, irp);
- if (status == STATUS_PENDING)
- KeWaitForSingleObject(&event, Executive, KernelMode, TRUE, NULL);
- status = ioStatus.Status;
- if (!NT_SUCCESS(status))
- {
- ExFreePool(fileObject->FileName.Buffer);
- fileObject->FileName.Length = 0;
- fileObject->DeviceObject = NULL;
- ObDereferenceObject(fileObject);
- }
- else
- {
- InterlockedIncrement(&fileObject->DeviceObject->ReferenceCount);
- if (fileObject->Vpb)
- {
- InterlockedIncrement(&fileObject->Vpb->ReferenceCount);
- }
- *Object = fileObject;
- DbgPrint(("Open file success! object = %x/n", fileObject));
- }
- return status;
- }
- NTSTATUS
- IrpFileClose(
- IN PDEVICE_OBJECT DeviceObject,
- IN PFILE_OBJECT FileObject
- )
- {
- NTSTATUS status;
- KEVENT event;
- PIRP irp;
- PVPB vpb;
- IO_STATUS_BLOCK ioStatusBlock;
- PIO_STACK_LOCATION irpSp;
- KeInitializeEvent(&event, SynchronizationEvent, FALSE);
- irp = IoAllocateIrp(DeviceObject->StackSize, FALSE);
- if (irp == NULL)
- return STATUS_INSUFFICIENT_RESOURCES;
- irp->Tail.Overlay.OriginalFileObject = FileObject;
- irp->Tail.Overlay.Thread = PsGetCurrentThread();
- irp->RequestorMode = KernelMode;
- irp->UserEvent = &event;
- irp->UserIosb = &irp->IoStatus;
- irp->Overlay.AsynchronousParameters.UserApcRoutine = (PIO_APC_ROUTINE)NULL;
- irp->Flags = IRP_SYNCHRONOUS_API | IRP_CLOSE_OPERATION;
- irpSp = IoGetNextIrpStackLocation(irp);
- irpSp->MajorFunction = IRP_MJ_CLEANUP;
- irpSp->FileObject = FileObject;
- status = IoCallDriver(DeviceObject, irp);
- if (status == STATUS_PENDING)
- {
- KeWaitForSingleObject( &event,
- UserRequest,
- KernelMode,
- FALSE,
- NULL);
- }
- IoReuseIrp(irp , STATUS_SUCCESS);
- KeClearEvent(&event);
- irpSp = IoGetNextIrpStackLocation(irp);
- irpSp->MajorFunction = IRP_MJ_CLOSE;
- irpSp->FileObject = FileObject;
- irp->UserIosb = &ioStatusBlock;
- irp->UserEvent = &event;
- irp->Tail.Overlay.OriginalFileObject = FileObject;
- irp->Tail.Overlay.Thread = PsGetCurrentThread();
- irp->AssociatedIrp.SystemBuffer = (PVOID)NULL;
- irp->Flags = IRP_CLOSE_OPERATION | IRP_SYNCHRONOUS_API;
- vpb = FileObject->Vpb;
- if (vpb && !(FileObject->Flags & FO_DIRECT_DEVICE_OPEN))
- {
- InterlockedDecrement(&vpb->ReferenceCount);
- FileObject->Flags |= FO_FILE_OPEN_CANCELLED;
- }
- status = IoCallDriver(DeviceObject, irp);
- if (status == STATUS_PENDING)
- {
- KeWaitForSingleObject( &event,
- Executive,
- KernelMode,
- FALSE,
- NULL);
- }
- IoFreeIrp(irp);
- return status;
- }
- NTSTATUS
- IrpFileRead(
- IN PFILE_OBJECT FileObject,
- IN PLARGE_INTEGER ByteOffset OPTIONAL,
- IN ULONG Length,
- OUT PVOID Buffer,
- OUT PIO_STATUS_BLOCK IoStatusBlock
- )
- {
- NTSTATUS status;
- KEVENT event;
- PIRP irp;
- PIO_STACK_LOCATION irpSp;
- PDEVICE_OBJECT deviceObject;
- if (ByteOffset == NULL)
- {
- if (!(FileObject->Flags & FO_SYNCHRONOUS_IO))
- return STATUS_INVALID_PARAMETER;
- ByteOffset = &FileObject->CurrentByteOffset;
- }
- if (FileObject->Vpb == 0 || FileObject->Vpb->RealDevice == NULL)
- return STATUS_UNSUCCESSFUL;
- deviceObject = FileObject->Vpb->DeviceObject;
- irp = IoAllocateIrp(deviceObject->StackSize, FALSE);
- if (irp == NULL)
- return STATUS_INSUFFICIENT_RESOURCES;
- irp->MdlAddress = IoAllocateMdl(Buffer, Length, FALSE, TRUE, NULL);
- if (irp->MdlAddress == NULL)
- {
- IoFreeIrp(irp);
- return STATUS_INSUFFICIENT_RESOURCES;;
- }
- MmBuildMdlForNonPagedPool(irp->MdlAddress);
- irp->Flags = IRP_READ_OPERATION;
- irp->RequestorMode = KernelMode;
- irp->UserIosb = IoStatusBlock;
- irp->UserEvent = &event;
- irp->Tail.Overlay.Thread = (PETHREAD)KeGetCurrentThread();
- irp->Tail.Overlay.OriginalFileObject = FileObject;
- irpSp = IoGetNextIrpStackLocation(irp);
- irpSp->MajorFunction = IRP_MJ_READ;
- irpSp->MinorFunction = IRP_MN_NORMAL;
- irpSp->DeviceObject = deviceObject;
- irpSp->FileObject = FileObject;
- irpSp->Parameters.Read.Length = Length;
- irpSp->Parameters.Read.ByteOffset = *ByteOffset;
- KeInitializeEvent(&event, SynchronizationEvent, FALSE);
- IoSetCompletionRoutine(irp, IoCompletionRoutine, NULL, TRUE, TRUE, TRUE);
- status = IoCallDriver(deviceObject, irp);
- if (status == STATUS_PENDING)
- status = KeWaitForSingleObject(&event, Executive, KernelMode, TRUE, NULL);
- return status;
- }
- NTSTATUS
- IrpFileWrite(
- IN PFILE_OBJECT FileObject,
- IN PLARGE_INTEGER ByteOffset OPTIONAL,
- IN ULONG Length,
- IN PVOID Buffer,
- OUT PIO_STATUS_BLOCK IoStatusBlock
- )
- {
- NTSTATUS status;
- KEVENT event;
- PIRP irp;
- PIO_STACK_LOCATION irpSp;
- PDEVICE_OBJECT deviceObject;
- if (ByteOffset == NULL)
- {
- if (!(FileObject->Flags & FO_SYNCHRONOUS_IO))
- return STATUS_INVALID_PARAMETER;
- ByteOffset = &FileObject->CurrentByteOffset;
- }
- if (FileObject->Vpb == 0 || FileObject->Vpb->RealDevice == NULL)
- return STATUS_UNSUCCESSFUL;
- deviceObject = FileObject->Vpb->DeviceObject;
- irp = IoAllocateIrp(deviceObject->StackSize, FALSE);
- if (irp == NULL)
- return STATUS_INSUFFICIENT_RESOURCES;
- irp->MdlAddress = IoAllocateMdl(Buffer, Length, FALSE, TRUE, NULL);
- if (irp->MdlAddress == NULL)
- {
- IoFreeIrp(irp);
- return STATUS_INSUFFICIENT_RESOURCES;;
- }
- MmBuildMdlForNonPagedPool(irp->MdlAddress);
- irp->Flags = IRP_WRITE_OPERATION;
- irp->RequestorMode = KernelMode;
- irp->UserIosb = IoStatusBlock;
- irp->UserEvent = &event;
- irp->Tail.Overlay.Thread = (PETHREAD)KeGetCurrentThread();
- irp->Tail.Overlay.OriginalFileObject = FileObject;
- irpSp = IoGetNextIrpStackLocation(irp);
- irpSp->MajorFunction = IRP_MJ_WRITE;
- irpSp->MinorFunction = IRP_MN_NORMAL;
- irpSp->DeviceObject = deviceObject;
- irpSp->FileObject = FileObject;
- irpSp->Parameters.Write.Length = Length;
- irpSp->Parameters.Write.ByteOffset = *ByteOffset;
- KeInitializeEvent(&event, SynchronizationEvent, FALSE);
- IoSetCompletionRoutine(irp, IoCompletionRoutine, NULL, TRUE, TRUE, TRUE);
- status = IoCallDriver(deviceObject, irp);
- if (status == STATUS_PENDING)
- status = KeWaitForSingleObject(&event, Executive, KernelMode, TRUE, NULL);
- return status;
- }
- NTSTATUS
- IrpFileQuery(
- IN PFILE_OBJECT FileObject,
- OUT PVOID FileInformation,
- IN ULONG Length,
- IN FILE_INFORMATION_CLASS FileInformationClass
- )
- {
- NTSTATUS status;
- KEVENT event;
- PIRP irp;
- IO_STATUS_BLOCK ioStatus;
- PIO_STACK_LOCATION irpSp;
- PDEVICE_OBJECT deviceObject;
- if (FileObject->Vpb == 0 || FileObject->Vpb->RealDevice == NULL)
- return STATUS_UNSUCCESSFUL;
- deviceObject = FileObject->Vpb->DeviceObject;
- KeInitializeEvent(&event, SynchronizationEvent, FALSE);
- irp = IoAllocateIrp(deviceObject->StackSize, FALSE);
- if (irp == NULL)
- return STATUS_INSUFFICIENT_RESOURCES;
- irp->Flags = IRP_BUFFERED_IO;
- irp->AssociatedIrp.SystemBuffer = FileInformation;
- irp->RequestorMode = KernelMode;
- irp->Overlay.AsynchronousParameters.UserApcRoutine = (PIO_APC_ROUTINE)NULL;
- irp->UserEvent = &event;
- irp->UserIosb = &ioStatus;
- irp->Tail.Overlay.Thread = (PETHREAD)KeGetCurrentThread();
- irp->Tail.Overlay.OriginalFileObject = FileObject;
- irpSp = IoGetNextIrpStackLocation(irp);
- irpSp->MajorFunction = IRP_MJ_QUERY_INFORMATION;
- irpSp->DeviceObject = deviceObject;
- irpSp->FileObject = FileObject;
- irpSp->Parameters.QueryFile.Length = Length;
- irpSp->Parameters.QueryFile.FileInformationClass = FileInformationClass;
- IoSetCompletionRoutine(irp, IoCompletionRoutine, NULL, TRUE, TRUE, TRUE);
- status = IoCallDriver(deviceObject, irp);
- if (status == STATUS_PENDING)
- KeWaitForSingleObject(&event, Executive, KernelMode, TRUE, NULL);
- return ioStatus.Status;
- }
- NTSTATUS
- IrpDirectoryQuery(
- IN PFILE_OBJECT FileObject,
- IN FILE_INFORMATION_CLASS FileInformationClass,
- OUT PVOID Buffer,
- IN ULONG Length
- )
- {
- NTSTATUS status;
- KEVENT event;
- PIRP irp;
- IO_STATUS_BLOCK ioStatus;
- PIO_STACK_LOCATION irpSp;
- PDEVICE_OBJECT deviceObject;
- PQUERY_DIRECTORY queryDirectory;
- if (FileObject->Vpb == 0 || FileObject->Vpb->RealDevice == NULL)
- return STATUS_UNSUCCESSFUL;
- deviceObject = FileObject->Vpb->DeviceObject;
- KeInitializeEvent(&event, SynchronizationEvent, FALSE);
- irp = IoAllocateIrp(deviceObject->StackSize, FALSE);
- if (irp == NULL)
- return STATUS_INSUFFICIENT_RESOURCES;
- irp->Flags = IRP_INPUT_OPERATION | IRP_BUFFERED_IO;
- irp->RequestorMode = KernelMode;
- irp->UserEvent = &event;
- irp->UserIosb = &ioStatus;
- irp->UserBuffer = Buffer;
- irp->Tail.Overlay.Thread = (PETHREAD)KeGetCurrentThread();
- irp->Tail.Overlay.OriginalFileObject = FileObject;
- irp->Overlay.AsynchronousParameters.UserApcRoutine = (PIO_APC_ROUTINE)NULL;
- //irp->Pointer = FileObject;
- irpSp = IoGetNextIrpStackLocation(irp);
- irpSp->MajorFunction = IRP_MJ_DIRECTORY_CONTROL;
- irpSp->MinorFunction = IRP_MN_QUERY_DIRECTORY;
- irpSp->DeviceObject = deviceObject;
- irpSp->FileObject = FileObject;
- queryDirectory = (PQUERY_DIRECTORY)&irpSp->Parameters;
- queryDirectory->Length = Length;
- queryDirectory->FileName = NULL;
- queryDirectory->FileInformationClass = FileInformationClass;
- queryDirectory->FileIndex = 0;
- IoSetCompletionRoutine(irp, IoCompletionRoutine, NULL, TRUE, TRUE, TRUE);
- status = IoCallDriver(deviceObject, irp);
- if (status == STATUS_PENDING)
- {
- KeWaitForSingleObject(&event, Executive, KernelMode, TRUE, NULL);
- status = ioStatus.Status;
- }
- return status;
- }
- BOOLEAN GetDriveObject(
- IN ULONG DriveNumber,
- OUT PDEVICE_OBJECT *DeviceObject,
- OUT PDEVICE_OBJECT *ReadDevice
- )
- {
- WCHAR driveName[] = L"//DosDevices//A://";
- UNICODE_STRING deviceName;
- HANDLE deviceHandle;
- OBJECT_ATTRIBUTES objectAttributes;
- IO_STATUS_BLOCK ioStatus;
- PFILE_OBJECT fileObject;
- NTSTATUS status;
- if (DriveNumber >= 'A' && DriveNumber <= 'Z')
- {
- driveName[12] = (CHAR)DriveNumber;
- }
- else if (DriveNumber >= 'a' && DriveNumber <= 'z')
- {
- driveName[12] = (CHAR)DriveNumber - 'a' + 'A';
- }
- else
- {
- return FALSE;
- }
- RtlInitUnicodeString(&deviceName, driveName);
- InitializeObjectAttributes( &objectAttributes,
- &deviceName,
- OBJ_CASE_INSENSITIVE,
- NULL,
- NULL);
- status = IoCreateFile( &deviceHandle,
- SYNCHRONIZE | FILE_ANY_ACCESS,
- &objectAttributes,
- &ioStatus,
- NULL,
- 0,
- FILE_SHARE_READ | FILE_SHARE_WRITE,
- FILE_OPEN,
- FILE_SYNCHRONOUS_IO_NONALERT | FILE_DIRECTORY_FILE,
- NULL,
- 0,
- CreateFileTypeNone,
- NULL,
- 0x100);
- if (!NT_SUCCESS(status))
- {
- DbgPrint(("Could not open drive %c: %x/n", DriveNumber, status));
- return FALSE;
- }
- status = ObReferenceObjectByHandle( deviceHandle,
- FILE_READ_DATA,
- *IoFileObjectType,
- KernelMode,
- &fileObject,
- NULL);
- if (!NT_SUCCESS(status))
- {
- DbgPrint(("Could not get fileobject from handle: %c/n", DriveNumber));
- ZwClose(deviceHandle);
- return FALSE;
- }
- if (fileObject->Vpb == 0 || fileObject->Vpb->RealDevice == NULL)
- {
- ObDereferenceObject(fileObject);
- ZwClose(deviceHandle);
- return FALSE;
- }
- *DeviceObject = fileObject->Vpb->DeviceObject;
- *ReadDevice = fileObject->Vpb->RealDevice;
- ObDereferenceObject(fileObject);
- ZwClose(deviceHandle);
- return TRUE;
- }
相关推荐
银河麒麟系统安装redis【亲测可行】
架构:Linux 5.10.0-9-generic x86_64 GNU/Linux。redis版本:redis-6.2.3.tar.gz。然后在执行make install,结束;OS:银河麒麟V10(SP1)未激活。cpu:I5-10代;
IRP操作文件填坑日记
背景: 近段时间一个项目需要IRP操作文件.于是.搜索硬盘.把好几年前的代码找出来.说起这个代码,需要感谢黑月教主(achillis)和炉子.当时炉子开源了PsVoid. 里面就有Irp操作文件.但是抄了之后.win7蓝屏.当时水平太菜.只好在Q上麻烦教主帮忙.教主帮忙分析一番之后.于是网上就有了.那个经典的ULONG UnKnow[41]. 然后各个博客转载…当然了.当时我自己也先存了一份.不过...
音视频入门:H264、H265概念总结
添加链接描述 什么是H.264与H.265 H.264与H.265都是视频压缩格式,由于视频本身的码流太大,所以需要经过压缩然后再通过网络进行传输。H.264是目前比较主流的压缩算法,像视频会议设备一般都采用这个编码格式。基础的H.264可以支持在1M带宽下传输720P30帧/秒的图像;H.264 HIGH PROFILE支持在512K带宽下传输720P30帧/秒的图像。 H.265是比较新的压缩算法,可以更一步提高压缩比,随着我们现在生活中出现的视频格式越来越大(比如现在基本都是1080P甚至4K的显示器
使用IRP进行文件操作
一定要先感谢为技术的进步而付出辛勤汗水的人,感谢他们对技术的共享.一个通用IRP访问文件的十六进制编辑器(开源代码) -- 被诅咒的神(邪恶八进制信息安全团队)Windows平台内核级文件访问 -- baiyuanfan (baiyuanfan@163.com)特别感谢被诅咒的神,他写的里面包含了非常多
告别实车测试:手把手教你用Vector VT平台搭建OBC/DCDC的HIL测试台架
本文详细介绍了如何利用Vector VT平台搭建新能源汽车OBC/DCDC的HIL测试台架,涵盖硬件选型、模型部署到自动化测试的全流程。通过HIL仿真测试技术,工程师可以高效验证动力域关键部件,大幅缩短开发周期并降低成本,特别适合新能源汽车三电系统的开发验证。
COMSOL实战:如何用有限元法(FEM)准确仿真电磁场问题?避坑指南
本文是一份COMSOL电磁场仿真实战指南,重点讲解如何运用有限元法(FEM)准确模拟电磁场问题。文章通过矩形波导和偶极子天线两大经典案例,详细剖析了从几何建模、物理场设置、网格剖分到结果验证的全流程,并提供了处理非线性材料、求解器收敛失败等高级问题的避坑技巧,旨在帮助工程师建立可靠的仿真工作流。
IRP管理文件
NTSTATUS IrpCreateFile( OUT PFILE_OBJECT *ppFileObject, IN ACCESS_MASK DesiredAccess, IN PUNICODE_STRING pustrFilePath, OUT PIO_STATUS_BLOCK IoStatusBlock, IN PLARGE_INTEGER AllocationSize OPTIONAL, IN ULONG FileAttributes, IN ULONG ShareAccess, IN
「UG/NX」多功能dll集成一个dll的三种方法
C++多功能集成一个dll的三种方法。
irp追踪工具_CreateFile_进行通讯 打印主请求号
/************************************************************************ * 文件名称:Driver.h * 作 者:张帆 * 完成日期:2007-11-1 *******************************...
QML 果冻抖动:用 Scale 动画模拟 Q 弹反馈
介绍果冻抖动效果:点击后卡片通过多段 ParallelAnimation 实现 Scale X/Y 反向缩放和逐步衰减,模拟果冻弹性形变;进阶版本加入小幅 Rotation 增加活泼感,适合游戏、儿童应用等趣味反馈场景。
【即插即用模块】卷积篇 | CVPR 2025 | LSConv:大核捕全局,小核提速度,替换 3×3 卷积/自注意力,精度效率双飙升
文章摘要: LSConv是一种新型卷积模块,采用"大核感知+小核聚合"策略,在轻量级视觉任务中表现出色。该模块由两部分组成:7×7深度可分离卷积(LKP)捕捉全局信息,动态3×3卷积(SKA)实现高效特征聚合。相比传统卷积和自注意力机制,LSConv在降低计算量的同时提升了精度,尤其适合高分辨率视觉任务。实验表明,在轻量化模型中用LSConv替代3×3卷积或自注意力,可显著减少计算量并提高准确率。模块支持即插即用,提供Triton优化实现,可直接集成到现有卷积或Transformer架构
内核文件管理-IRP(一)创建或打开文件
内核下通过直接向 FSD (File System Driver) 发送 IRP (I/O Request Packet)来管理文件,可以绕过一些 API Hook。 本文讲怎样通过向 FSD 发送 IRP_MJ_CREATE 消息的 IRP 来创建或打开文件(或目录)。 头文件及其他声明或定义 #include <ntifs.h> typedef struct _AUX_ACCESS_DATA { PPRIVILEGE_SET PrivilegesUsed; GENERIC_MAPPIN
C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片
基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正
【旧文章搬运】PsVoid中IrpCreateFile函数在Win7下蓝屏BUG分析及解决
原文发表于百度空间,2010-04-05========================================================================== 这也许是我这个假期唯一做的跟Code有关的事了,已经一个多月没写代码了~~问题是这样的,某同学A,在自己的工程中使用了PsVoid的部分驱动源码(感谢炉子开源~~),提到里面的IrpCreateFile函数在...
STM32F407中文手册
STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。
win10 跳过U8环境检测的IE WebControls.rar
win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。
内核无HOOK文件防删除
内核无HOOK文件防删除,可以过冰刃,xuetr,easydelete 本来是打算写暴力删除文件的程序的,结果意外发现,只需要在内核发送irp打开一个文件,之后不关闭Object,就拒绝其他程序访问了,easydelete这个工具还是比较强的,不过也不能删除,关键是不挂钩任何函数,不修该系统内核,看属性的时候只能看到一个常规,其它的什么都看不到,当然了360(7.0
Probability and Statistics - 4th edition
Probability and Statistics - 4th edition
【半原创】Irp占坑保护文件不被删除
Irp操作出自125096的博客 http://blog.youkuaiyun.com/qq125096885/article/details/53033896 这里提下 博主的例子中使用irpclose文件对象,这可能会造成蓝屏。 见链接:https://bbs.pediy.com/thread-215269.htm 所以这里把IrpCloseFile改为ObDereferenceObj
MFC中的CFile以及windowsAPI
在VC编程中,操作文件的方法主要有两种:利用API函数和MFC的CFile类。微软在其中封装了文件的一般操作,下面我就介绍一下如何利用这两种方法实现文件操作。 1.创建或打开一个文件 API函数CreateFile可打开和创建文件、管道、邮槽、通信服务、设备以及控制台,但是在此时只是介绍用这个函数怎么实现创建和打开一个文件。 HA
Win32学习笔记——windows的库
一 静态库 1. 静态库的特点 1.1 目标程序的归档。 1.2 静态库的代码会被嵌入到程序当中。 1.3 程序执行时不需要静态库存在。 2. C语言静态库 2.1 创建静态库 创建Win32静态库项目,使用*.c文件文件建立项目。 2.2 添加静态库函数 2.3 在程序中将静态库导入 2.3.1 项目中使用Setting里设置 2.3.2 使用关键字 p
types.h头文件学习
types.h头文件纵观,就可以看出是对一些数据类型的重命名或者是定义,以及对DMA通用地址的定义以及其64为的特性。下面是types.h头文件的源代码,主要的学习内容都在注释当中。 #ifndef _I386_TYPES_H #define _I386_TYPES_H #ifndef __ASSEMBLY__ /** * 纵观这个头文件,发现该头文件主要是用来给 * 定义类型以及...
自己构造 Create IRP
NTSTATUS IrpCreate(IN PUNICODE_STRING Name,IN ACCESS_MASK DesiredAccess,IN ULONG FileAttributes,IN ULONG ShareAccess,IN ULONG CreateDisposition,IN ULONG CreateOptions,IN PDEVICE_OBJECT DeviceObject,IN
IRP_MJ_CREATE
IRP_MJ_CREATE 发送时机: IO管理器在一个文件或目录创建时, 或一个已存在的文件,设备,目录,Volume被打开时 发送此IRP. 通常在应用层调用CreateFile, 或内核层调用: IoCreateFile IoCreateFileSpecifyDeviceObjectHint ZwCreateFile ZwOpenFile 引发此I...
IRP操作文件之再填坑
啧,大佬飘过……文字较多,可以直接看最后面的 最近在捣腾发送IRP_MJ_CREATE打开文件,同时要能解 reparse point。几顿操作猛如虎之后,终于可以正常解析 reparse point了,然后就像检验一下,这整个流程和IoCreateFile的区别大不大。就在打开的时候,加了个 FILE_DELETE_ON_CLOSE标记,看看FileObject销毁后文件是否...
【驱动笔记9】初探IRP
文章作者:grayfox作者主页:http://nokyo.blogbus.com原始出处:http://www.blogbus.com/nokyo-logs/34005738.html 此前我们可能曾经多次听说过IRP这个名词,那么它究竟是什么呢? IRP的全名是I/O Request Package,即输入输出请求包,它是Windows内核中的一种非常重要的数据结...
悲剧膜拜一句话刷新缓存
悲剧膜拜一句话刷新缓存 前两天苦恼于如何刷新缓存,本来打算按照正常思路直接找CcFlushxx和MmFlushXX的参数,也就是遍历CcVACBs,尚未尝试不知是否可行之际无意发现Azy大牛博客上最后一篇文章写得一句话刷新缓存。膜拜之,我思路还是太窄了~ HANDLE hFile = CreateFile(L"\\\\.\\C:", GENERIC_WRITE|GENERIC_READ
IRP操作文件
版权声明:本文为博主原创文章,未经博主允许不得转载。 [cpp] view plain copy #include #ifndef MAX_PATH #define MAX_PATH 260 #endif NTSTATUS ObOpenObjectByPointer(PVOID Obje
3332



被折叠的 条评论
为什么被折叠?



