
Windows
文章平均质量分 65
生活需要深度
这个作者很懒,什么都没留下…
展开
-
批处理脚本(bat脚本)用法总结
在默认模式下,批处理脚本在执行代码块时会提前替换变量的值,因此如果在一个代码块中改变了变量的值,这个改变后的值在同一个代码块中将不会被正确地获取。在批处理脚本中,setlocal 用于创建一个本地环境,这个本地环境中的变量和状态只对当前批处理文件有效,不会影响到其他批处理文件或者批处理文件的外部环境。在启用延迟扩展后,!在命令行模式下设置的环境变量,属于临时环境变量,只针对当前的CMD命令窗口有效,并不影响其他窗口中的环境变量,更不会影响到永久性的环境变量,要设置永久的环境变量,需要通过图形操作修改。原创 2024-05-09 16:52:42 · 2204 阅读 · 0 评论 -
windows linux 融合,Windows和Linux的设备驱动框架的对比融合研究
主要特色为设备节点,把设备当作文件看待,一个设备被主次设备号唯一确定,通过访问/dev目录下的设备文件,也就是设备的inode,得到设备类型、设备的主次设备号,从而正确访问设备。接口函数满足了文件描述符的建立,读写,关闭的过程,open打开设备,read和write读写设备,ioctl对设备进行一些控制操作。通过对比,提炼出设备驱动框架的通用性,认清平台的特殊性,区分出实现方法的不同,融合出一套新的分层过滤式设备节点式的驱动框架,进而推广到其它操作系统上,以指导驱动程序的编写。2.2Linux的访问路径。原创 2023-03-14 17:23:53 · 316 阅读 · 0 评论 -
从 Windows 向 Linux 迁移设备控制应用程序
主要区别是,Linux 的普通文件、目录、设备和 socket 都是文件 —Linux 的所有东西都是文件。如果读者开发过不同平台的设备控制应用程序,那么肯定了解 Windows 和 Linux 的设备控制方式的差别,从一个平台向另一个平台迁移应用程序相当复杂。但是,由于设备控制架构的差异,获取设备句柄会根据所用平台不同(Windows 还是 Linux)而有不同的过程。但是 Windows 的控制代码和 Linux 的请求在定义上差别很大,以致没有固定规则能够找出这两个参数的映射关系,如前文所述。原创 2023-03-14 17:20:35 · 844 阅读 · 0 评论 -
Microsoft Visual Studio 2019正式版离线安装包下载
进入到命令提示符,输入以下命令后按下回车键,如图5。“zh-CN en-US”为需要安装的语言,此处选择了简体中文和英语,还可以添加“zh-TW”(注意用空格与其他语言分开)使程序同时下载繁体中文包。在刚才设置的离线安装文件存放目录中,可看到下载好的离线安装文件,如图9,打开“vs_setup.exe”这个程序即可开始安装Visual Studio 2019。本文主要介绍如何通过官方渠道下载Visual Studio 2019正式版的完整离线安装包,并且提供已下载好的离线安装包(包含中文和英语)。原创 2023-03-03 09:23:36 · 7483 阅读 · 0 评论 -
windows系统信息获取
记得刚学习python的时候是在系统属性--->高级--->环境变量--->系统变量(让电脑的所有用户都能在cmd窗口使用python)--->Path里面增加C:\Python27、C:\Python27\Scripts两个路径。常用系统变量:%ProgramFiles% %SystemRoot% %SystemDrive% %Path%使用set命令可以输出所有环境变量值,set + ProgramFiles(变量名前后都不用加%)输出某个环境变量的值。原创 2023-02-14 10:11:54 · 265 阅读 · 0 评论 -
Windows/Linux获取当前运行程序的绝对路径
GetModuleFileNameA()函数获取绝对路径,不过文件路径中的反斜杠需要进行替换。原创 2023-02-13 17:10:04 · 889 阅读 · 0 评论 -
在win10命令行(cmd)中添加临时环境变量
去下载了最新版的CMake(https://cmake.org/download/), 当前版本是3.24.1(cmake-3.24.1-windows-x86_64.msi)计算机上这么多要用CMake的程序, 谁也没将cmake的path加入永久PATH, 估计是怕cmake之间版本不同互相影响吧.打开cmd, 在命令行中输入cmake, 说文件不存在. 就是说cmake不在永久环境变量PATH中.最好将要附加的path放到临时path的最前面, 防止有同名的cmake程序的路径在path中.原创 2023-01-31 17:16:49 · 2054 阅读 · 0 评论 -
多线程锁详解之【互斥量】
之所以需要加入 MutantListHead 队列,之前也说过了,是为了让线程结束时,系统能够知道哪些互斥门还没有被正确释放,以便系统帮我们调用 KeReleaseMutant,而系统调用 KeReleaseMutant 函数时, Abandon 参数为 TRUE,这个时候互斥门内部的 Abandoned 也会被设置为TRUE,表示在此之前,发生了至少一次不愉快的事情(一个或多个线程没有正确释放互斥锁)。就是当拥有互斥锁权限的线程,在结束时没有释放锁权限的话,系统会帮其释放锁权限。我们动动手指计算一下,原创 2022-11-21 18:53:10 · 274 阅读 · 0 评论 -
WDF驱动中KMDF与UMDF区别
从Windows 2000开始,开发驱动程序必以WDM(Windows Driver Model)为基础的,但是,如果使用DDK来开发WDM,其开发难度之大,根本不能奢望像用户模式应用程序开发那样容易,因此,一般用户都是使用WinDriver、DriverStudio之类的第三方工具。4、KMDF是Windows系统底层驱动,文件名为:*.SYS,Vista为2万多外设提供了KMDF,其中也包括USB2.0,因此对于具有USB2.0协议的FX2,只需编写与FX2相关的UMDF即可;原创 2022-11-10 14:45:11 · 1524 阅读 · 0 评论 -
如何使用WinDbg查找蓝屏原因
点击后,需要连接服务器,稍等片刻,在对话框中输入。一开始我这边一直没弹出对话框,我还以为出了什么问题,后面等了一会就出来了。虽然找到了原因,但为啥使用PPTP的vpn网络连接会在关机时导致蓝屏这就不得而知了。导致的蓝屏,一度怀疑是新装 了机械硬盘导致的,因为以前在深圳没有出现过这种问题。后面查找了一下资料,发现可以使用WinDbg来分析dmp文件来查找蓝屏的原因。出现这个界面的时候,是在连接服务器,需要稍等片刻,出现如下的界面。至此我也明白了,是因为我配置了PPTP的VPN网络连接导致的。原创 2022-11-10 10:26:22 · 5413 阅读 · 1 评论 -
利用windbg分析崩溃,句柄泄漏,死锁,CPU高,内存泄漏
Windbg的一些简单使用命令。原创 2022-11-10 10:24:25 · 1830 阅读 · 0 评论 -
windows 多线程协同同步
多线程信息同步基本处理互斥对象 - Win32 apps | Microsoft Learn多线程内容处理原创 2022-11-09 18:05:16 · 157 阅读 · 0 评论 -
windows驱动远程VS 2019调试
此处建议选择无身份验证!, 空闲时间可稍微设置长一点,否则可能会出现修改代码重新调试后,需要重新连接。今天遇到一个问题,本地调试无任何问题,但是发布后代码服务器端响应总是不对。我很确定服务器的所有防火墙已关闭,端口也是可以开放的。云服务器安装完毕后,在开始菜单里面找到Remote Debugger,点击打开配置访问接口。一直往下翻,找到最底下的所有下载,点击全部展开,下载远程工具,根据自己电脑版本下载。vs2019开启,打开对应的程序源码,点击调试->附加到进程。2.4、将需要调试的代码部署到服务器。原创 2022-11-07 14:59:22 · 909 阅读 · 0 评论 -
利用vs 分析DMP文件、pdb文件定位release下的异常崩溃
如果程序crash的时候没有框蹦出来,可以通过改注册表的设置让操作系统在程序crash的时候自动生成dump,并放到特定的目录。在代码调试过程中,知道会出现bug的情况下,手动点击工具栏的调试->将转储另存为,生成dump文件。exe文件和pdb文件同时生成,dmp文件是由当前exe生成的。上图中,“生成调试信息”为pdb文件生成与否的使能开关,“生成程序数据库文件”为该pdb文件的名字,默认即可。1.pdb的路径就是前面生成exe时,同时生成pdb文件,其存放的路径。应该具体到某一个.pdb文件。原创 2022-11-07 14:46:02 · 852 阅读 · 0 评论 -
Timer定时器 Windows
要想实现这些功能,就可以使用定时器的 API 函数 CreateWaitableTimer 和 SetWaitableTimer 来实现了,这对 API 函数创建的时钟是比较精确的,可以达到 100 倍的 10 亿分之一秒。#039 OutputDebugString(_T("10秒定时器到了/r/n"));原文链接:https://blog.youkuaiyun.com/ffghggf/article/details/86571505。#020 // 设置10秒钟。原创 2022-11-07 14:19:09 · 2888 阅读 · 0 评论 -
java 显示c控制台程序窗口,Windows-如何清除C中的控制台屏幕?
由于您提到cls,所以听起来您是在指Windows。如果是这样,则此KB项具有将执行此操作的代码。在Windows上,它将使用printf的clrscr(),在Linux上,它将使用ANSI转义码。使用宏可以检查您是否在Windows,Linux,Mac或Unix上,并根据当前平台调用相应的函数。除了使用system("cls")之外,是否还有“适当”的方法来清除C中的控制台窗口?您还可以创建一个全新的控制台屏幕缓冲区,并使其成为当前的屏幕缓冲区。您可以改为插入换行符,直到所有内容滚动为止,在这里看看。原创 2022-11-04 13:49:10 · 729 阅读 · 0 评论 -
系统时间和定时器 -- 《Windows内核编程》
补充中断级知识》:内核代码始终运行在某个“中断级”上,代码并非从头到尾连续执行,而是在某些执行过程中随时可能被打断:异常发生、中断发生、线程切换等。高中断级上运行的代码不会被低中断级上运行的代码中断,主要的中断级从高到低是:Dispatch>APC>Passive。注意:这是一个“延时执行”的过程,而不是一个定时执行的过程。我们只需要关注DeferredContext,这个参数是KeInitializeDpc调用时传入的参数,用来提供给CustomDpc被调用的时候,让用户传入一些参数。原创 2022-10-29 15:52:21 · 557 阅读 · 0 评论 -
InstallShield使用完全教程
还可以在Feature下创建子Feature,比如如果文档Feature下包括软件本身文档,和软件所需的运行环境的文档,那么可以创建两个子Feature,分别包含两种文档,用户在安装时就可以选择安装部分或者全部文档了。看着还行吧,就这样了,其实InstallShield里面还有很多其它的配置选项,另外自己写脚本的话,完全可以个性化定制界面,只不过上面的配置对一般的屌丝来说够用了,所以其它的,感兴趣的自己去玩吧,最好是自己写脚本,工具党还是闹不出什么大事来,囧。向注册表写键和键值,由于本工程不需要,忽略之。原创 2022-10-24 10:19:09 · 5285 阅读 · 0 评论 -
LNK2001无法解析的外部符号 SDDL_DEVOBJ_SYS_ALL_ADM_RWX_WORLD_RW_RES_R
LNK2001无法解析的外部符号 SDDL_DEVOBJ_SYS_ALL_ADM_RWX_WORLD_RW_RES_R。解决方法:链接属性设置中增加。原创 2022-10-21 14:50:53 · 303 阅读 · 0 评论 -
windows驱动字符串处理
定义一个UNICODE_STRING类型的变量,这只是一个空的结构体而已,我们并没有给它分配任何的内存。如果直接对其进行字符串拷贝等操作,肯定会 引起异常的,当我们定义这样类型的一个变量,我们应该就把它看作一个WCHAR型的指针,没有“new”空间,所以我们必须去“new”空间给它。记住这个字符串不能再被修改,因为这就像定义了char *str = “123”;该字符串不能再被修改。这种方式就像定义一个静态的串 WCHAR wcsBuffer[1024] = {0}。使用完之后,必须释放内存。原创 2022-10-21 14:48:19 · 669 阅读 · 2 评论 -
C++使用Windows API- GetModuleFileName获取可执行文件路径方法。
版权声明:本文为优快云博主「cww_sh26」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.youkuaiyun.com/cww_sh26/article/details/125248071。HMODULE hModule, // 模块的句柄,如果是当前模块,NULL。在“属性 -> C\C++ -> 语言”选项 下,将“符合模式”设为“否”。从后向前查找字符'\',并将其后字符置为0,作为字符串结尾。// 返回值:获取到字符串大小。原创 2022-10-21 14:45:57 · 1900 阅读 · 0 评论 -
判断文件或文件夹(目录)是否存在 C/C++ win/linux通用
2. 在使用access()所在.cpp第一条语句位置加上 #define _CRT_NONSTDC_NO_WARNINGS,重新编译即可,原理和2一样。2. 项目-属性-C/C+±预处理器中加入“_CRT_NONSTDC_NO_WARNINGS”,保存后重新编译项目即可。函数原型:int _access(const char* _Filename, int _AccessMode);一、windows下使用_access()或linux下使用access()函数。原创 2022-10-21 14:44:54 · 3295 阅读 · 0 评论 -
用VS写C语言无法使用`__attribute__(packed)`
今天,在Windows上写C语言程序,结果编写的结构体总是无法使用__attribute__((packed)),导致读取的二进制文件字节对不上。搜了半天,得到的解决方法主要是在结构体前加上pragma pack(1);解释为 #pragma pack(1)让编译器将结构体数据强制连续排列。检查CMakeLists.txt和代码均没有发现明显错误。查询网络文章#pragma pack(1) 的意义是什么。想到的第一个解决方法。原创 2022-10-08 14:26:17 · 5472 阅读 · 0 评论 -
LoadLibrary windows动态库加载
str 当前为窄字符串,通过上面的转换成为宽字符串,类型WCHAR,便可以直接作为LoadLibrary的参数了,比较灵活。我当初是为了加载一个文件夹下的所有dll文件,所以我用的第2种这种方式。LoadLibrary函数的参数为宽字符,有两种方式设置宽字符。这两种方式都是在字符串上添加L,字符串不可使用变量替换。2. 通过窄字符串转换的方式。1. 通过C自带的函数等。原创 2022-10-08 14:12:46 · 2779 阅读 · 0 评论 -
Windows11+VS2019驱动开发环境搭建
官方给出了一个详细的文档,可以之间参看官方问文档进行学习:编写 Hello World Windows 驱动程序 (KMDF) - Windows drivers | Microsoft Learn原创 2022-09-19 17:28:54 · 5314 阅读 · 0 评论 -
windows驱动开发环境搭建
基本环境搭建。原创 2022-09-15 14:15:11 · 239 阅读 · 0 评论 -
使用StackWalker类打印当前运行堆栈信息
备注:如果需要具体拿到字符串数据,用子类,重写OnOutput函数即可。之前一直找这个找不到,从git上找到了StackWalker类分享。原创 2022-09-07 16:16:38 · 1196 阅读 · 0 评论 -
Windows用户及组管理
每一个用户登录系统后,拥有不同的操作权限。每个账号有自己唯一的SID(安全标识符)用户SID:S-1-5-21-426206823-2579496042-14852678-500系统SID:S-1-5-21-426206823-2579496042-14852678用户UID:500windows系统管理员administrator的UID是500普通用户的UID是1000开始不同的账户拥有不同的权限,为不同的账户赋权限,也就是为不用账户的SID赋权限!原创 2022-09-07 16:13:36 · 2755 阅读 · 0 评论 -
Windows控制台API基本使用(下)
写入的字符将在该行的最后位置输出,并且光标将保持在该字符的上方,就好像 ENABLE_WRAP_AT_EOL_OUTPUT 已禁用一样,但将输出下一个可输出字符,就像 ENABLE_WRAP_AT_EOL_OUTPUT 已启用一样。遇事不决,重绘解决。重新使用特定属性绘制文本是一个不错的方法,但是您必须知道您重绘的位置上的文本,有关 Windows 下获取指定区域文本的 API 将会在后面的章节提到(下次修改会添加关于这个 API 的信息,但您现在可以在 Microsoft Docs 预先浏览它)。原创 2022-09-06 13:47:48 · 1344 阅读 · 0 评论 -
Windows控制台API基本使用(上)
多数情况下,笔者更推荐使用 CONSOLE_SCREEN_BUFFER_INFOEX,因为 CONSOLE_SCREEN_BUFFER_INFOEX 拥有与之匹配的函数,而 _CONSOLE_SCREEN_BUFFER_INFO 和 CONSOLE_SCREEN_BUFFER_INFO 仅有一个获取函数(GetConsoleScreenBufferInfo),所以,能用就用吧。其值可以设为 sizeof(CONSOLE_FONT_INFOEX),下方代码将会演示如何使用此函数和结构。下方代码演示了此功能。原创 2022-09-06 13:46:52 · 1943 阅读 · 0 评论 -
安装VMware15.5+安装win10虚拟机操作系统
14.接下来设置三个安全问题,这里就不截图了,根据自己实际情况设置,问题的答案需要你记住的但是也不能太过于真实,或者可以换种方式表达,最好是只有你自己能懂的,因为还是需要考虑一下安全问题。(5)分配完成之后需要将每个分区进行格式化,最后再点击【驱动器0分区2】,选择这个分区作为系统盘,点击【下一步】继续安装,然后可能需要等待一段时间,这段时间你可以找点别的事做。11.这里看个人需求,需要就添加,不需要的话就跳过就行,我是直接跳过了,然后就等待配置完成。...原创 2022-09-01 14:05:09 · 1115 阅读 · 0 评论 -
fatal error C1083: 无法打开包括文件: “stdafx.h”: No such file or directory
1、报错“ 无法打开包括文件: “stdafx.h”: No such file or directory ”这里的错误是,你包含了#include “stdafx.h” 产生所产生的,大概你是创建的空项目,却包含了这个头文件。2、解决办法办法一将头文件替换掉(建议此种做法,较简单);查看 “stdafx.h” 所包含的内容为:12这里只需将你的 ,#include “stdafx.h” 删除掉。更换为 其所包含的内容。...原创 2022-09-01 11:41:31 · 17251 阅读 · 0 评论 -
Windows下mmap的等价实现
1、报错“ 无法打开包括文件: “stdafx.h”: No such file or directory ”这里的错误是,你包含了#include “stdafx.h” 产生所产生的,大概你是创建的空项目,却包含了这个头文件。2、解决办法办法一将头文件替换掉(建议此种做法,较简单);查看 “stdafx.h” 所包含的内容为:12这里只需将你的 ,#include “stdafx.h” 删除掉。更换为 其所包含的内容。......原创 2022-09-01 11:40:58 · 2218 阅读 · 0 评论 -
Windows与Linux 枚举文件和文件夹
【代码】Windows与Linux 枚举文件和文件夹。原创 2022-09-01 10:42:05 · 666 阅读 · 0 评论 -
Windows命令加载动态库
【代码】Windows命令加载动态库。原创 2022-08-30 14:04:02 · 946 阅读 · 0 评论 -
MinGW-w64安装教程——著名C/C++编译器GCC的Windows版本
MinGW 的全称是:Minimalist GNU on Windows。它实际上是将经典的开源 C语言 编译器 GCC 移植到了 Windows 平台下,并且包含了 Win32API ,因此可以将源代码编译为可在 Windows 中运行的可执行程序。而且还可以使用一些 Windows 不具备的,Linux平台下的开发工具。一句话来概括:MinGW 就是 GCC 的 Windows 版本。原创 2022-08-25 15:09:02 · 56311 阅读 · 4 评论 -
MSYS2 + GCC + CMAKE环境搭建
软件包 https://www.msys2.org/,双击安装到某根目录下,比如C:\msys64。The UK Mirror Service Sorceforge mirror等。日本北陆先端科学技术大学院大学SourceForge镜像。中国科学技术开源软件镜像。清华大学开源软件镜像站。原创 2022-08-19 18:57:15 · 8054 阅读 · 1 评论 -
POSIX线程与Win32线程
我可能注意到的一个很大的不同是,在Win32下,您使用实际的系统调用来处理线程,而POSIX线程的调用是库(pthreads)的一部分,在许多Unix系统下,它调用Unix的一些非常低级的系统调用。只是为了向您证明,除非深入研究,否则pthreads没什么特别的,您可以下载暴露了与pthreads完全相同的接口的pthreads-win32,并且任何函数都映射在Win32线程API上。在Windows NT家族内核和许多Unix内核中,如何"在幕后"管理和调度线程之间存在巨大差异,但这不是问题。原创 2022-08-25 15:01:22 · 3610 阅读 · 0 评论 -
Windows与Linux系统信号与thread
例如连接到终端的进程,用户按下CTRL+c,将导致内核向进程发送一个SIGINT的信号,进程如果不对该信号做特殊的处理,系统将采用默认的方式处理该信号,即终止进程的执行;++ handler: 函数指针,表示要对该信号进行捕捉的函数,该参数也可以是SIG_DEF(表示交由系统缺省处理,无需理会)或SIG_IGN(表示忽略掉该信号而不做任何处理)。sighandler_t是信号捕捉函数,由signal函数注册,注册以后,在整个进程运行过程中均有效,并且对不同的信号可以注册同一个信号捕捉函数。原创 2022-08-25 14:58:35 · 586 阅读 · 0 评论