自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 资源 (6)
  • 收藏
  • 关注

原创 windows7/windows10 虚拟显示器部署(Virtual monitor)

最近有些网友看了我之前的博客之后,向我要虚拟显示器的bin文件,由于之前代码是绑定在VDI下的,没有单独的虚拟显示器代码,所以抽空提取了下相关代码,单独编译。网盘:https://pan.baidu.com/s/1vdqm0Is9pjAcG40Qf_q7cw有问题加QQ 3505459047咨询。总结了下网友的一些用途,这几种情况下使用虚拟显示器(显卡欺骗器功能的软件)可以解决:...........................

2018-07-09 22:36:01 96098 41

原创 win7下虚拟显示器完成记(virtual monitor)——VDI显卡透传场景

背景本次使用wddm过滤驱动的应用场景是VDI GPU透传场景,我这边运用WDDM过滤驱动,也有人叫wddm hook,主要有如下功能:(1)给透传显卡虚拟出一个显示器,因为透传显卡都是插在服务器上,一台服务器需要插十几张显卡(消费级显卡),不可能给每个显卡插一个显示器,不插显示器又会存在分辨率无法设置,分辨率过低的问题,为此需要自己虚拟一个显示器“插”在透传显卡上。(2)我们VDI使...

2017-11-28 10:17:41 24478 9

转载 windows虚拟显示器开发(三)USB显示器

用户态驱动中的函数大致和Direct3D中的API是一一对应的关系,因此每次程序调用显卡相关的函数(如3D函数),一般会被D3D Runtime转换到用户态驱动中对应的函数中,由用户态驱动完成实际的功能。关于WDDM框架的分析,我们需要从入口函数分析,我们就拿我们比较熟悉的win10 QXL驱动来进行底层逆向分析,win10的QXL驱动是WDDM Displayonly的驱动,其与Dxgknrl的通信方式及获取入口地址的原理与常规WDDM是一致的,我们逆向的到的原理如图2所示。

2022-11-13 21:15:23 1901 1

原创 windows无窗口定时器WaitableTimer使用记录

2017年做SR程序时写的一个备忘录,今天再次使用定时器,翻出来看看,记录下。自动重置的定时器,信号一到自动执行回调函数,需要用SleepEx才能执行回调函数。#include "stdafx.h"#include <windows.h>VOID CALLBACK TimerAPCProc(LPVOID lpArg, DWORD dwTimerLowValue, DWO...

2019-09-14 20:28:52 521

原创 windows虚拟显示器SDK开发和提供

背景这周末闲来无事,整理了下虚拟显示器的源码,发现有几个项目都用到了,但是使用的功能不尽相同:(1)最简单的运用仅仅是需要显示器的拔插;(2)稍微复杂一点的是需要设置显示器的分辨率,包括标准的分辨率,如19201080,还包括非标准的分辨率,如1120900;(3)再复杂一点的需要设置显示器名称、刷新频率、获取虚拟显示器屏幕图像信息。再观察我的那几个项目,都重复的导入了源码,每次发现一个...

2019-09-07 21:03:44 13240 3

原创 win10虚拟显示器开发

2017.7.7最近在做虚拟化,需要在虚机上虚拟出一个显示器,我使用的虚机是windows10,虚机里面有一张透传显卡(可看做是物理显卡),我尝试过一些方法,比如编写一个虚拟的WDDM显卡驱动,然后在显卡驱动上接上一个显示器,该方法是有效的,可以成功虚拟出一个显示器,但是在虚拟显示器上渲染数据使用的渲染引擎没有用到透传显卡,在性能上达不到我的要求,所以只好放弃用这种方法。于是,通过阅...

2019-05-15 15:13:32 9240 11

原创 windbg分析堆溢出

本文实验的例子来自《windows高级调试》第6.2.2节,参考书中的方法进行。1.通过windbg分析堆块 (1)在命令行运行程序,输入参数(输入超过10个字符),在出现如下提示的时候,使用windbg attach到该进程。 (2)按任意键继续执行,执行完后,程序崩溃到windbg,使用kb命令查看堆栈如下: (3)我们看到报的堆栈信息是在HeapFree函...

2019-03-02 21:28:23 2129

原创 windbg分析栈溢出

本文根据《windows高级调试》5.2.2章节提供的示例进行的实验,在win10平台,使用该书提供的bin文件进行调试,因平台不一样在实验过程中发现跟书上有些不同,本章书上的一些调试方法的正确性有待商榷(可以留言讨论)。调试准备(1)代码,见文章末尾;(2)将以下注册表保存到.reg后缀的文件,点击添加到注册表;Windows Registry Editor Version...

2019-02-23 22:31:32 1780

原创 OBS源码阅读计划

  去年年中,看过一段时间OBS源码,当时主要想通过它来对3D全屏图片的抓取,它是通过HOOK D3D和OpenGL来实现的,不过后来我找到了更好的方式,所以阅读OBS源码也就终止了。  今年正好有机会可以去做自己想做的事情,所以还是想系统的把整个OBS搞一遍,以及加入一些我认为更优的截屏方式,OBS涉及到的内容和知识点是比较多的,还有包括它的设计思想,搞通整个工程对音视频、DX、OPENGL...

2018-11-23 10:21:57 562 1

原创 记一次蓝屏问题解决

最近看了张银奎的《软件调试》第30章,有种醍醐灌顶、如沐春风的感觉,想找找机会去用windbg去实战下。最好的方式是看看部门有没有现有的问题让我去跟,于是找到领导,问最近有没有什么蓝屏问题之类的需要跟踪的,领导喜笑颜开,你真我的好员工啊,有个问题我正愁没人跟呢,我们小组的***不是要离职了吗,他最近在跟踪一个蓝屏问题,跟了几天,我看他也没什么心思在上面,你把这个问题接过来吧。好...

2018-09-07 19:49:23 1735

原创 win7 x64 inline hook的尝试

最近因为虚机性能问题,需要验证下是不是因为内核态加锁时间过长导致,所以需要在内核态hook两个内核函数:KeAcquireSpinLockAtDpcLevel和KeReleaseSpinLock,虚机的操作系统是win7 64位。所以在内核态hook,我采用inline hook的方式,有借鉴的blog:https://blog.csdn.net/u013761036/article/detail...

2018-07-11 18:21:36 3634

原创 关于Linux信号的备忘录

最近在做一个动态日志模块,需要用到linux信号,虽然用到的有关信号的东西都比较简单,但是我感觉还是要系统的学一下信号,为加强理解和今后便于记忆,写了下学习和使用中的一些备忘录。安全的结束进程循环的终止有时候对于某些程序,我们不知道何时停止他们运行,只是在他们运行过程中我们达到了我们需要的结果我们才让他们停止运行,这样的程序我们一般是写一个while(true)的循环,当然我们终止...

2018-06-21 09:50:50 425

原创 wfp sample msnmntr的部署和测试

最近要做Windows网络过滤,所以找了下微软有关wfp的sample来进行学习,于是就找到了msnmntr这个工程,它在微软sample中的Windows-driver-samples-master\network\trans\msnmntr路径下。...

2018-05-19 14:01:06 1993 1

原创 Windows dll forward功能

使用场景:(1)我们会有这种需求,比如版本升级,新版本的dll导出一些函数是旧的dll没有的,但是同时要导出旧的dll原先存在的一些函数,而这些函数功能都没有发生变化,一般而言对于这些原本已经存在的函数,我们可能会直接将源码拷贝到新dll工程,一起整合导出,或者新dll也导出那个函数,只不过它自己什么都不做,只是简单的调用旧的dll函数,有没有更便捷的方式?(2)我们想过滤一个系统dll函数(例如...

2018-04-30 21:15:35 676

原创 新工作适应期

2011年3月到升腾资讯实习报道,导师林志*。小组人员:林志*、王*,詹*、段*、余*、廖*、张士*、林奇*、邱智*。2015年6月10日到锐捷网络报道,导师陈小*。一到公司召集大家开会互相认识,小组人员:陈小*、曾*、陈*、王云*、彭*、许永*、苏其*、郑凯*。陈小*单独同我沟通今后的规划和方向,主要是QXL显卡驱动方向,后来有些偏差,但是最终自己还是走了这个方向,而且做的还不错。锐捷是个很不错...

2018-04-20 17:47:41 1046 3

原创 windows驱动读写文件不成功

做的虚拟显示器有个功能是设置显示器的Edid,Edid的数据是由应用程序传进来的,为防止每次开机、重启都要进行Edid的设置。为了记住上一次设置的Edid,我需要在驱动里面操作文件,然而在操作文件的时候会出现一些问题。读文件如下:BOOL CvMonitor::SyncEdidFromFile(){ if (PASSIVE_LEVEL < KeGetCurrentIrql(

2017-11-24 10:34:42 1703

原创 程序员的消极开发

在远程协助开发阶段,我这边功能开发完后,去找A工联调,发现A工在那很悠闲,就问,不是下个月就要转测了吗,怎么这么悠闲?工程师A不慌不忙的说,我在等待B工呢,我的XXX功能需要他那边程序向我发送数据我才能进行下去,接着我又找到B工,他也在闲着,我就问问,A工不是在等待你开发吗,你怎么也闲着?B工就说我在等待C工呢,他正在进行界面开发,等他把框架提供给我我才能进行下去,我接着就问,那C工快开发完了吗,

2017-09-11 11:15:07 481

原创 开发应用识别软件遇到的一些windows编程技能

(1)winmain函数的参数解析:/* 对于64位应用程序的处理,64位的SR进程只负责将64位dll注入到64位应用程序中,其他工作都由32位SR进程处理 */ LPWSTR *szArgList; int argCount; szArgList = CommandLineToArgvW(GetCommandLine(), &argCount); if (argCount != 2

2017-03-06 10:41:44 370

原创 C++11实现简单生产者消费者模式

当前C++11已经实现了多线程、互斥量、条件变量等异步处理函数,并且提供了诸如sleep之类的时间函数,所以后面使用C++开发这一块的时候完全可以实现跨平台,无需在windows下写一套然后又在linux下写一套了。   本文用C++11实现了一个简单的生产者-消费者模式,生产者每1S将一个数值放到双向队列中,消费者每2S从双向队列中取出数据。#include "stdafx.h"#in

2016-11-16 11:21:04 10801

原创 linux信号量实现线程读写同步

本次使用linux信号量来实现线程读写同步,还是实现之前写的那个读和写数组的例子,本次在写的过程中出现一个死锁问题,原因是先进入临界区,然后等待信号量,这样造成读函数在等待信号量,写函数在等待进入临界区,所以修改了下程序,先进入信号量的等待,再进入临界区的等待,这也说明了我们写程序时不能长时间占用临界区,会很容易造成死锁。程序代码如下:#include #include #include #

2016-07-21 15:57:43 817

原创 windows信号量实现读写同步

windows上的线程同步提供了用户状态下的线程同步和内核状态下的线程同步,内核下的线程同步因为要涉及到内核模式和用户模式的切换,所以消耗是用户模式下的几倍,但是内核下的同步机制不仅适用于线程同步还适用于进程间同步,这是用户模式下的同步所不具备的,而且内核模式下同步在等待触发过程中是可以指定等待时间,这也是用户模式下同步所缺乏的。    这篇,我用内核模式下的同步机制实现了之前写的读写同步,使

2016-07-20 15:15:09 1743

原创 Windows下条件变量实现读写同步

上一篇写了个小程序,运用了下linux下条件变量实现多线程的同步,在windows上也有条件变量这个概念,只不过它是到vista之后才有支持,在linux上条件变量需要结合互斥量一起使用,Windows上的条件变量可以结合临界区或者读写锁,具体用哪个需要结合使用的场景。    如果要实现上一篇的那个程序,在Windows上我们可以这样实现:#include "stdafx.h"#incl

2016-07-17 15:31:27 3913

原创 linux条件变量实现读写同步操作

在生产者-消费者这类场景中,如果要实现同步,使用条件变量是一个很好的选择,在linux中,条件变量要结合互斥量使用。   本次我实现了一个程序,开启10个线程,其中若干是往一个共享区域写数据,其余的是从共享区域读数据,应该说是典型的生产者-消费者模式,本程序通过用户按下任意按键终止,各个线程安全退出,代码如下:#include #include #include #include

2016-07-15 17:38:17 541

原创 几个简单的shell脚本

今天写了个linux shell脚本,通过不同命令行参数来执行不同操作,使用到了linux shell的命令行参数输入和case语句,此篇做备忘录吧。#!/bin/shcase $1 inwebp) cd webp;;jpeg) cd jpeg;;zlib) cd zlib;;lz) cd lz;;*) echo "Invalid parameter!" exit -1;;

2016-07-14 17:26:48 563

原创 Spiceserver内存操作相关函数的使用

Spiceserver内存操作部分也是整个项目用的比较多的模块,它自己封装了一套内存操作的函数,要掌握Spiceserver必须要掌握这些函数的使用,本篇我主要介绍一下我在阅读和使用这些函数及宏的一些理解,可能不是很全面,甚至理解不是很到位,后面有新的理解和发现再对blog进行更新。    内存操作相关函数和宏    内存块数据结构及操作函数    内存块的使用Demo

2016-05-10 10:57:52 1358 3

原创 Spiceserver中链表的使用

spiceserver代码中很多地方都用到了链表,刚开始看代码的时候会因为这些链表,或者有关这些链表的宏而感到困惑,造成阅读上的困难,其实这些代码我们可以单独将其提取出来,写一些demo进行验证和测试,我们可以用windows上的vs或者linux上的gcc进行编译,本次我将使用VS2013来开发。 常规链表    我们在学C语言的时候会学到链表,比如我们要写一个管理学生成绩的链表,我们就

2016-05-06 18:04:10 3564

原创 windows下文件夹遍历

文件夹的操作,是我们在编程中经常遇到的问题,在linux上和windows上经常会有文件夹操作的需求,典型的例子如遍历文件夹中的所有文件,在这两个系统中文件夹操作所提供的API也有所不同。  最近我老婆向我提了一个需求,便于她管理文件夹:开发一个exe,将exe放入一个目录下,点击该exe,生成这个目录下所有文件的清单,文件夹用“【】”括起来,同时根据文件级别进行缩进。  这个需求实现起来

2016-05-06 11:28:52 2459

原创 cJson库的使用

用过很多次cJson库,都是比较简单的使用,而且每次用了都会忘记,只能去翻曾经写过的代码或是重新到网上查找下,今天在这里记录下曾经有用到过的json数据的拼装和解析。  至于什么是JSON和C语言库在哪查找,不懂的可以自行百度。 json数据拼装简单结构  我们先来拼装一个简单的Json数据:存储学生张三的信息,他的信息有number(学号),name(姓名),class(班级),

2016-05-05 18:29:12 3023

原创 windows和linux下等待线程的退出

在linux上,创建一个线程然后在主进程中等待线程的退出,系统提供的api是比较显而易见的,创建线程使用pthread_create,线程退出使用pthread_exit,主线程等待线程退出使用pthread_join,下面就是在等待一个睡眠5S的线程退出例子,我们也可以获取到线程退出时传递的一些消息。#include #include #include #include void

2016-02-22 14:08:46 1434

原创 linux下获取系统内存信息

之前在一家公司做linux嵌入式,有一个需求就是获取当前设备的总内存大小以及剩余内存大小。  我们知道我们可以从/proc/meminfo文件中查看这两个信息大小,运行如下命令:  上面内存的信息量很多,我们并不需要这么多信息,我们要的也就其中的一行,为此我们可以再进行一些过滤,再使用下grep命令,运行如下命令,然后就可以得到我们需要的那一行:

2016-01-27 18:22:46 2285

原创 linux获取文件大小的几种方法

对于linux获取文件大小,有几种方式,首先是比较明显的方案,调用stat方式,该方式直接获取文件大小,比较明显,剩下的两种方式都是采用间接方式,将文件游标指向文件末尾,然后获取游标相对于文件开头的偏移量。   实现如下:/* 第一种方式,直接使用stat的调用方式 */size_t getfilesize1(const char *filepath){ struct stat stat

2016-01-27 14:27:18 2683

原创 win32 edit控件尾部追加内容

有时候我们可能想在win32程序上实时打印我们想要的一些信息,不是以覆盖的形式而是以追加的形式。    以前我常常采用比较笨的方式,首先调用GetDlgItemText获取原先字符串,保存在一个字符数组里面,然后将字符数组追加一个字符串,再调用SetDlgItemText函数达到自己的目的了,这种方式如果要打印的文字短还比较好处理,但是当文字量达到一定程度时我们势必就要分配一个特别大的存储区域

2016-01-20 14:38:22 4285

原创 mirrordriver sample编译和部署

1.概述最近因工作需要,要使用到显卡驱动,微软WDK里面集成了一个显卡驱动的Sample程序,下面我将一步步讲述如何对该sample程序进行编译和部署,在这里我使用的环境是32位win7,为防止蓝屏对物理机产生影响,我将系统装在了vmware虚拟机上。安装编译环境是必须的,在这里我只装了WDK,并没有集成到visualstudio中,编译驱动也只用到了其提供的Build工具,我安...

2015-07-14 21:57:32 2217 3

原创 win32下Listbox文件拖放及delete键删除

前一篇我们讲了win32下编辑框的文件拖放,今天我们来讲讲ListBox下的文件拖放,其实原理是一样的,可以复用编辑框文件拖放的代码,在编辑框文件拖放中我们只是实现了单个文件拖放,在ListBox中我们来实现一次性多个文件拖放。   我们先来讲下文件拖放的核心函数:DragQueryFile函数,定义如下:UINT DragQueryFile( HDROP hDrop, U

2015-03-09 10:45:49 1133

原创 win32编辑框文件拖放和文字过滤

我们可能会遇到这样的需求,我们要计算一个文件的md5值,为此我们必须输入文件的地址,或者通过一个按钮打开文件浏览框,然后选择要计算的文件,有时候往往文件就在我们眼前但是我们还是需要浏览器一步步找它的路径,这时候如果编辑框支持文件的拖放就方便很多了。关于编辑框支持文件拖放MFC下实现是比较简单的,我今天来讲下win32下如何实现,代码比较简单:#include #include #

2015-03-05 11:13:26 1138

windows高级调试 带书签

windows高级调试 带书签,相对于软件调试更适合初学者

2018-09-18

数据结构迷宫实验报告

数据结构迷宫最短路径的实验报告,使用了广度优先遍历方式。

2012-05-20

VC++高级界面特效制作百例

《VC++高级界面特效制作百例》书籍源码,主要讲解在VC下各种界面特效的制作代码

2012-05-20

USB开发大全

各种usb开发,windows下USB通信等.

2012-05-18

侯杰翻译Win32多线程程序设计

多线程开发技术详解,深入理解windows下多线程的开发知识

2012-05-15

windows程序设计源码

windows程序设计源码,包含各章源代码

2011-10-31

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除