草庐IT

c++ - Microsoft Virtual Audio Device Driver Sample (MSVAD) 仅创建 44 字节文件

我目前正在研究MSVAD简单驱动程序。不幸的是,它没有按照我希望的方式工作。当一个新程序启动时,它在C:\下创建为STREAM_NN.WAV不幸的是,这个文件只有44字节大小(只包含文件头)。我附加了调试器View并得到了这个输出:MSVAD:[CMiniportWaveCyclic::NewStream]MSVAD:[CMiniportWaveCyclicMSVAD::ValidateFormat]MSVAD:[CMiniportWaveCyclic::NewStream]MSVAD:[CMiniportWaveCyclicMSVAD::ValidateFormat]MSVAD:CM

windows - KeWaitForSingleObject() 上的 'WaitReason' 参数的用途是什么?

TheMSDNdocs不要在这里解释各种选项会发生什么(尽管对“WaitMode”参数非常清楚)。为什么我会选择“Executive”而不是“UserRequest”或KWAIT_REASON中的无数其他选项? 最佳答案 我的理解是,这个值被设置到调用线程的_KTHREAD::WaitReason字段中,并且它严格用于诊断目的。_KTHREAD::WaitReason由各种Windows诊断服务使用和显示。 关于windows-KeWaitForSingleObject()上的'Wait

windows - 在不使用微软编译器的情况下开发 Windows 驱动程序

我的团队有一个C语言代码库,用于不同平台的多个嵌入式系统。我们有一群人正试图将此代码库的一部分移植到Windows驱动程序中。但是,Microsoft编译器的某些方面与我们现有的代码库不一致(C99功能等)。我们尝试在产品之间保持通用代码库并避免为某些平台创建分支,但特定于Windows的解决方法和#ifdefs的数量越来越多。有没有办法使用Microsoft以外的编译器构建Windows驱动程序?我们的代码库在gcc和GreenHills下编译良好,我们也应该能够在其上使用IntelC编译器(我们已经尝试了一段时间,但它应该仍然有效)。能够使用不同的编译器将有助于保持我们的代码更简洁

windows - 您如何从源代码构建 Windows D3D9 refrast?

Microsoft将源代码分发给硬件供应商、驱动程序开发人员等,以引用其不同Direct3DAPI的实现。此代码使用一向神秘的WDK(以前称为DDK)构建系统构建,并且几乎从不在外部运行盒子。尽管被广泛使用,但此代码是半私有(private)的,因此在更广泛的网络上从来没有任何基本有用的信息可用。这已经足够常用(并且在这个社区中是众所周知的痛苦),并且基本构建信息不够敏感,应该可以在Google上发现它。构建自述文件建议使用WDK并使用命令build-cz-daytona进行构建。令人困惑的是,这会吐出一堆输出,但什么也没构建。克服这一点,带有WDK6001.18002的Vista,最

c++ - Windows 驱动内核 : How enumerate all subdirectories and files?

我在一个小型的antirootkit中工作,我需要添加一个功能:删除rootkit目录和您可能的子目录中的所有文件。那么,首先有必要知道所有这些目录和文件,对吧?为此,我下面的代码已经完成了这项任务的一半。他枚举了特定目录的所有目录和文件,但不“查看”子目录(文件和文件夹)。例如:输出:代码:#includetypedefunsignedintUINT;NTSTATUSEnumFilesInDir(){HANDLEhFile=NULL;UNICODE_STRINGszFileName={0};OBJECT_ATTRIBUTESOa={0};NTSTATUSntStatus=0;IO_S

windows - 将文件内容从内核模式传递到用户模式的最快方法?

我会尽量简短但完整地描述:这是特定于Windows的。使用Windows驱动程序开发工具包(DDK)。我是第一次编写内核模式驱动程序(KMD),之前没有任何内核模式经验。我目前正在使用DDK附带的“扫描仪”微型过滤器示例,并在其上进行扩展以进行练习。“扫描器”微型过滤器是通用“反病毒”类型扫描驱动程序的基本轮廓,它Hook文件创建/关闭并对关联文件进行操作以在批准/拒绝请求的操作之前扫描“坏词”。最终目标是在打开文件时用用户模式应用程序扫描文件,决定微型过滤器是否应该允许操作完成,而不会对正在尝试的进程或用户造成明显的减慢打开文件。当尝试保存时,我还想再次扫描整个文件,以决定是允许保存

c++ - 将预处理器变量传递给 nmake 构建环境

我在Win7x64构建环境中使用nmake构建驱动程序时遇到问题。我正在定义一个预处理器变量并使用-通过命令行传递它build/nmake"USER_C_FLAGS=/DMyVersion=3"构建日志是-.../DMyVersion=3/typedil-/wd4603/wd4627....因此,我清楚地将变量视为编译器选项的一部分。现在在标题文件中,我做#defineotherVersion10#ifdefMyVersion#undefotherVersion#defineotherVersionMyVersion#endif#defineFileVersionotherVersio

c++ - 我的 SetupDiEnumDeviceInterfaces 不工作

我很想知道我这样做是否正确://DeviceManager.h#include//#include#include#include#include#include#includeextern"C"{#include}//#pragmacomment(lib,"setupapi.lib")classDeviceManager{public:DeviceManager();~DeviceManager();voidListAllDevices();voidGetDevice(std::stringvid,std::stringpid);HANDLEPSMove;bytereportBuff

c++ - 使用 SCH_CRED_FORMAT_CERT_HASH 时,AcquireCredentialsHandle 在内核模式下失败

我调用AcquireCredentialsHandle在内核驱动程序中,传入SCHANNEL_CREDdwCredFormat设置为SCH_CRED_FORMAT_CERT_HASH。它因SEC_E_NO_CREDENTIALS而失败。这是我的代码:BYTEcertHashBytes[20]={0x6d,0x64,0xed,0x56,0xd2,0x94,0x15,0xf4,0x49,0x08,0xaf,0x18,0xf1,0xca,0xf5,0xa2,0xc8,0x01,0x20,0x96};CredHandlecredHandle;RtlZeroMemory(&credHandle,

c++ - 在 Windows 中以编程方式区分 USB 软盘驱动器和 USB 闪存驱动器

在Windows(XP-7)上,是否有可靠的方法以编程方式区分C++中的USB软盘驱动器和USB闪存驱动器?目前,我正在使用WMI在有新Win32_LogicalDisk时获取更新检测实例,然后使用LogicalDisk对象的DriveType属性找出基本类型。这工作得很好,除了软盘驱动器和USB闪存驱动器都是DriveTypeDRIVE_REMOVABLE,所以为了区分它们(软盘与闪存),我使用IOCTL_STORAGE_GET_HOTPLUG_INFO接口(interface)来确定设备是否可热插拔,并且正在研究这意味着它是闪存驱动器而不是软盘的原理。同样,我认为这在内部软盘驱动器