Tag: windows

使用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字符串。

如何规避Windows Universal CRT标头对vcruntime.h的依赖性

在尝试使用Windows通用C运行时(… \ Windows Kits \ 10 \ Include \ 10.0.15063.0 \ ucrt)评估Windows上的Clang时,我立即面临意外的墙,forms是未公开的意外依赖在微软的Visual Studio上。 显然,即使是最简单的C程序也只有在包含任何标准C头时才能编译,因为它们似乎最终都试图#include vcruntime.h(它不是UCRT的一部分)。 我的问题是: 有没有办法在没有Visual Studio的情况下使用Windows Universal C RTL SDK? 如果它不是有意或不可能的,为什么它不被称为“Windows CRT for Microsoft VC” – 我错过了什么?

未定义的“睡眠”参考,但我确实包括

嗯,这一定是个傻瓜。 下面是C中不可能更简单的代码。它不能编译说“未定义的睡眠引用”。 但我认为我包含了我需要的所有系统头… #include #include int main() { printf(“Test starts.\n”); sleep(1); printf(“Test ends.\n”); return 1; }

我可以通过检查DLL本身来判断使用哪个版本的Visual Studio来构建DLL

我需要重建几年前建立的DLL。 我有原始的C源代码,但不是Visual Studio项目或解决方案。 我想尝试使用最初使用的相同Visual Studio版本重建它。 我可以说这是一个普通的旧Windows DLL,而不是.NET。 我也知道源代码在C中。通过检查DLL二进制文件,还有什么我可以告诉原始构建环境和工具吗? 谢谢!

使用scanf_s读取字符

我只是乱搞C并遇到了这个小问题。 正如你从我的输出中看到的那样,我得到了’╠’这个角色。 #include “stdio.h” void main() { char c; printf(“Do you want to be X’s or O’s?\n”); scanf_s(“%c”, &c); printf(“You chose %c\n”, c); } 见程序输出

如何在Windows上的64位应用程序运行时在程序集中设置函数参数?

我试图使用generics函数中使用的汇编代码设置参数。 这个generics函数的参数 – 驻留在dll中 – 在编译期间是未知的。 在运行期间,使用GetProcAddress函数确定指向此函数的指针。 然而,其论点尚不清楚。 在运行时,我可以使用数据文件(不是头文件或任何可以包含或编译的内容)来确定参数 – 值和类型。 我找到了一个很好的例子,说明如何解决32位的这个问题( C Pass参数作为从LoadLibrary()导入函数的void-pointer-list ),但对于64位这个例子不起作用,因为你无法填充堆栈但你必须填写登记册。 所以我尝试使用汇编代码填充寄存器,但直到现在都没有成功。 我使用C代码来调用汇编代码。 我使用VS2015和MASM(64位)。 下面的C代码工作正常,但汇编代码没有。 那么汇编代码出了什么问题呢? 提前致谢。 C代码: … void fill_register_xmm0(double); // proto of assembly function … // code determining the pointer to a func returned by the GetProcAddress() … double dVal = 12.0; int v; fill_register_xmm0(dVal); v = func->func_i(); // […]

错误C4996:’scanf’:此函数或变量在c编程中可能不安全

我创建了一个小应用程序,通过使用带参数的用户定义函数来查找最大数量。 当我运行它时,它会显示此消息 错误1错误C4996:’scanf’:此函数或变量可能不安全。 请考虑使用scanf_s。 要禁用弃用,请使用_CRT_SECURE_NO_WARNINGS。 详细信息请参见在线帮助。 我该怎么做才能解决这个问题? 这是我的代码 #include void findtwonumber(void); void findthreenumber(void); int main() { int n; printf(“Fine Maximum of two number\n”); printf(“Fine Maximum of three number\n”); printf(“Choose one:”); scanf(“%d”, &n); if (n == 1) { findtwonumber(); } else if (n == 2) { findthreenumber(); } return 0; } void findtwonumber(void) { int a, […]

Windows上最快的屏幕捕获方法

我想为Windows平台编写一个截屏程序,但不确定如何捕获屏幕。 我所知道的唯一方法是使用GDI,但我很好奇是否还有其他方法可以解决这个问题,如果有的话,会产生最少的开销? 速度是一个优先事项。 屏幕录像程序将用于录制游戏镜头,但是,如果这确实缩小了选项范围,我仍然可以接受任何其他超出此范围的建议。 毕竟知识还不错。 编辑 :我遇到过这篇文章: 捕获屏幕的各种方法 。 它向我介绍了Windows Media API的实现方式以及DirectX的实现方式。 它在结论中提到禁用硬件加速可以大大提高捕获应用程序的性能。 我很好奇为什么会这样。 任何人都可以为我填补遗失的空白吗? 编辑 :我读过像Camtasia这样的截屏程序使用他们自己的捕获驱动程序。 有人能给我一个深入的解释它是如何工作的,为什么它更快? 我可能还需要有关实现类似内容的指导,但我确信无论如何都有现有的文档。 另外,我现在知道FRAPS如何记录屏幕。 它挂钩底层图形API以从后台缓冲区读取。 根据我的理解,这比从前端缓冲区读取更快,因为您正在从系统RAM而不是videoRAM中读取数据。 你可以在这里阅读这篇文章。