Tag: wdk

我们转换Descriptor + Descriptor-> SerialNumberOffset时序列号枚举失败

我有一个内核驱动程序,用于查找存储设备的序列号,但驱动程序存在问题。 Descriptor->SerialNumberOffset是103但是(LPCSTR)(UINT_PTR)Descriptor+(DWORD32)Descriptor->SerialNumberOffset为NULL 这是我的代码 NTSTATUS GetDeviceTypeAndUniqueID(IN PDEVICE_OBJECT StorageStackDeviceObject, cwDevices *lDeviceTypeArg, char *pszUidArg) { DWORRD lDeviceType=0; STORAGE_PROPERTY_QUERY Query; STORAGE_DEVICE_DESCRIPTOR Buffer[4]; NTSTATUS Status = STATUS_SUCCESS; ULONG uBusType=BusTypeUnknown; PSTORAGE_DEVICE_DESCRIPTOR Descriptor=NULL; PIRP NewIrp2=NULL; PIO_STACK_LOCATION NextIrpStack=NULL; IO_STATUS_BLOCK IoStatus; char szSptr[2]={‘_’,’\0′}; Query.PropertyId = StorageDeviceProperty;// first set the query properties Query.QueryType = PropertyStandardQuery; lDeviceType=0; if (KeGetCurrentIrql() > PASSIVE_LEVEL) { return STATUS_SUCCESS; } if(StorageStackDeviceObject […]

将“\\?\”字符串添加到路径 – DriverPackageUninstall

我使用DriverPackageUninstall来卸载我的驱动程序。 对于这个API,我需要输入“Inf Path”作为输入。 我需要将此路径作为UNICODE字符串。 为此,我从MSDN中获取以下声明作为参考。 对于Unicode字符串,最大长度为32,767个字符。 如果使用Unicode版本,请在路径前添加“\?\”字符串。 有关文件路径字符串格式的一般信息,请参阅在MSDN Library中命名文件。 但是当我在我的代码中尝试相同时它不起作用。 有人可以给我一些关于如何在路径之前添加“\?\”的示例吗? 谢谢.. 更新: 我尝试使用以下代码作为示例 #define UNICODE #define _UNIOCDE #define WINVER 0x501 #include #include #include int main () { PTCHAR DriverPackageInfPath = TEXT(“\\?\\c:\\Documents and Settings\\Desktop\\My.inf”); FILE * Log; Log = _wfopen( TEXT(DriverPackageInfPath, TEXT(“a”)); if ( Log == NULL ) { MessageBox(NULL, TEXT ( “Unable to open […]

如何理解windows ddk中的“NTSTATUS”,“NT_SUCCESS”typedef?

两个问题: 1。 在“ntdef.h”中, NTSTATUS定义如下: typedef __success(return >= 0) LONG NTSTATUS; 到底是什么“__ success(return> = 0)”? 2。 在“ntstatus.h”中, STATUS_SUCCESS定义为0。 #define STATUS_SUCCESS ((NTSTATUS)0x00000000L) // ntsubauth 但是“ntdef.h”中的NT_SUCCESS宏是: #define NT_SUCCESS(Status) (((NTSTATUS)(Status)) >= 0) 不应该是“状态== 0”吗?

我怎样才能编译程序员Dvorak?

我正在尝试编译开源项目Programmer Dvorak 。 问题是它有点旧,并没有使用当前版本的构建工具构建。 您可以在我的项目的Google代码页上看到我在线修改的完整源代码。 版本2是原始项目中未修改的源文件。 修订版3是我做出所有重大更改的地方。 您可以在此处看到两个修订版之间的差异 。 剩下的唯一明显问题是一些LINK警告: LNK4254 (例如section ‘.edata’ (40000040) merged into ‘.data’ (C0000040) with different attributes. ) – 我在这里问了一个独立版本的问题。 LNK4210 (例如.CRT .CRT section exists; there may be unhandled static initializers or terminators ) 我该如何修复这些警告? 我可以忽略它们吗? 尽管有这些警告,它仍然会产生一个exe。 但是,如果我继续运行它,它将无法正确安装,我需要求助于系统还原才能再次安装正式版本。 这可能是因为警告或仅仅是因为我没有正确修改项目。 我还需要做些什么来使这个项目可以安装? 构建过程(以及对我的修改的解释): 它说您需要Windows DDK,但似乎Windows驱动程序工具包已经取代它,所以我得到了它。 我只安装了“Build Environments”。 1.根据Readme.txt ,您应该运行: build-layout && build-installer 2.运行build-layout.bat […]

使用win32和C从WDK驱动程序中的UNICODE_STRING中提取路径名组件

我试图分离UNICODE_STRING路径名的组件,以便从设备根目录到文件叶创建目录树。 这需要在WDK驱动程序中完成。 我需要使用ZwCreateFile()一次构建一个目录结构,因为它只能在单个调用中创建最终目录或叶子而不是整个路径。 为C工程师提出这样一个简单问题的道歉,但是我遇到了问题,并在驱动程序中使用它。 我目前的方法是将UNICODE_STRING转换为char并使用strtok_s()函数将路径名称分解为其组件目录和文件。 我想用 char string1[] = “\\Device\\HarddiskVolume”; char seps[] = “\\”; char *token1 = NULL; char *next_token1 = NULL; token1 = strtok_s(string1, seps, &next_token1); 但我需要将UNICODE_STRING转换为char字符串。

DDK“你好世界”

如何开始为Windows编写驱动程序? 那里有某种官方DDK“Hello World”的例子吗? 虽然我确信它最初会超出我的脑海,但最终我想创建一个简单的MIDI驱动程序,就像Maple Virtual MIDI Cable ,其中MIDI消息来自用户应用程序而不是物理设备。 (使用现成的MIDI环回驱动程序的麻烦在于输入和输出端的存在常常让用户感到困惑。我的应用程序生成的MIDI输出被发送到其他程序的MIDI输入,所以如果我可以创建一个连接到我的程序而不是硬件的假驱动程序,它可以消除这种混乱。) 感谢您的时间。