<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[依然那霖哥]]></title><description><![CDATA[工作不是为了工作，学习也不是为了学习]]></description><link>https://blog.youkuaiyun.com/Jammg</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Jammg]]></copyright><item><title><![CDATA[Windows四年内核开发总结及未来发展随笔]]></title><link>https://blog.youkuaiyun.com/Jammg/article/details/115555138</link><guid>https://blog.youkuaiyun.com/Jammg/article/details/115555138</guid><author>Jammg</author><pubDate>Fri, 09 Apr 2021 17:59:43 +0800</pubDate><description><![CDATA[太久没写博客，最近开始关注虚拟化技术，稍微总结一下过去。

回想17年毕业到现在，已经接触Windows驱动差不多四年时间，期间开发了各式各样的驱动，磁盘、文件、网络、HID、显示器音频、摄像头等等，从0到1一步一个脚印，学习驱动过程，也算是对Windows内核有个“深入”的了解了。

不管开发了多少驱动，真正的技术是对于内核的理解。

犹记得刚开始接触驱动的时候，我会将用户态程序统称业务，我对业务非常不感冒；随着接触的驱动类型越来越多，慢慢觉得其实驱动也不过是一个更小的业务，开始“厌烦”开发各种“更小业务]]></description><category></category></item><item><title><![CDATA[【A-Protect】x86 Hook 系统调用]]></title><link>https://blog.youkuaiyun.com/Jammg/article/details/82718660</link><guid>https://blog.youkuaiyun.com/Jammg/article/details/82718660</guid><author>Jammg</author><pubDate>Sat, 15 Sep 2018 22:56:08 +0800</pubDate><description><![CDATA[ 

代码

DriverEntry 创建线程，部分执行代码如下：




VOID IsKernelBooting(IN PVOID Context)
{

// ...

	_asm
	{
		pushad;
		mov ecx, 0x176;                     // msr EIP
		rdmsr;
		mov KiFastCallEntry, eax;
		popad...]]></description><category></category></item><item><title><![CDATA[WinDbg——拓展DLL开发入门]]></title><link>https://blog.youkuaiyun.com/Jammg/article/details/81292214</link><guid>https://blog.youkuaiyun.com/Jammg/article/details/81292214</guid><author>Jammg</author><pubDate>Mon, 30 Jul 2018 21:23:32 +0800</pubDate><description><![CDATA[WinDbg提供了接口实现第三方开发自定义功能的库。

废话少说，以下是最简单的一个Demo，只包含一个help指令。

 

实现

 

主要包含两个点：

1. 实现DebugExtensionInitialize 函数，这是实现WinDbg拓展DLL必须实现的；WinDbg在载入此DLL会调用。

2. 导出函数

 

创建一个简单的DLL工程。

源码如下：

.h


#includ...]]></description><category></category></item><item><title><![CDATA[windows 10环境下 使用 msys2 + vs code 配置 c++ 的编译环境(转)]]></title><link>https://blog.youkuaiyun.com/Jammg/article/details/72546016</link><guid>https://blog.youkuaiyun.com/Jammg/article/details/72546016</guid><author>Jammg</author><pubDate>Fri, 19 May 2017 16:54:30 +0800</pubDate><description><![CDATA[不太多描述 msys2 与  vs code  ，既然你需要安装 一种语言的编译环境了 ，你肯定对这两个不陌生；

1. 先安装msys2; (下载多少位的msys2就安装多少位的 mingw，本人安装 32位的)

下载连接地址：http://msys2.github.io/

按照 官网文档，一步一步安装。

2.修改msys 源（推荐修改）

修改参考地址：https:/]]></description><category></category></item><item><title><![CDATA[Singleton优化(Double-Checked Locking Pattern)]]></title><link>https://blog.youkuaiyun.com/Jammg/article/details/70226823</link><guid>https://blog.youkuaiyun.com/Jammg/article/details/70226823</guid><author>Jammg</author><pubDate>Tue, 18 Apr 2017 12:23:47 +0800</pubDate><description><![CDATA[Singleton简单实现class Singleton
{
public:
    static Singleton* GetInstance()
    {
        Guard(mutex);
        if (!instance)
            instance = new Singleton;
        return instance;
    }
privat]]></description><category></category></item><item><title><![CDATA[数据流图（DFD）画法]]></title><link>https://blog.youkuaiyun.com/Jammg/article/details/70143350</link><guid>https://blog.youkuaiyun.com/Jammg/article/details/70143350</guid><author>Jammg</author><pubDate>Wed, 12 Apr 2017 15:42:36 +0800</pubDate><description><![CDATA[在绘制系统数据流图的过程中，结构化需求分析方法通常强调“自顶向下，逐层分析”的思想。对于大规模的软件系统而言，需要采用多层的数据流图才能将问题描述清楚，而对于中等规模或小型的软件系统而言，采用三层的数据流图就可以了。在三层的数据流图中，顶层数据流图主要描述目标系统作为一个整体与外部用户或数据之间的交互；中层数据流图是对顶层数据流图的细化，描述系统的主要功能模块，以及数据在功能模块之间的流动关系；底]]></description><category></category></item><item><title><![CDATA[【FFmpeg(2016)】SwrContext 转换PCM音频位数]]></title><link>https://blog.youkuaiyun.com/Jammg/article/details/62218586</link><guid>https://blog.youkuaiyun.com/Jammg/article/details/62218586</guid><author>Jammg</author><pubDate>Wed, 15 Mar 2017 19:28:38 +0800</pubDate><description><![CDATA[【相关博客】
【FFmpeg(2016)】PCM编码AAC

【FFmpeg(2016)】SwrContext重采样结构体


【前言】
这两天在做一些音频的编码，但FFmpeg的编码库avcodec有20M这么大，所以决定使用其他库进行编码。网上发现faac体积小，直接编解码，于是决定使用faac库作为编码模块。


但是从faac的源码发现，它只支持如下格式的PCM编码：]]></description><category></category></item><item><title><![CDATA[【Window】Win32 API连接热点]]></title><link>https://blog.youkuaiyun.com/Jammg/article/details/54233268</link><guid>https://blog.youkuaiyun.com/Jammg/article/details/54233268</guid><author>Jammg</author><pubDate>Sun, 08 Jan 2017 13:23:51 +0800</pubDate><description><![CDATA[Window 无线网络处理相关博文：


【Window】获取电脑连接的网络信息




Window 平台操作无线网络相关的的问题，大多都是使用 wlanapi 库，以下连接Wifi也不例外。


要连接热点得必须有ssid 和 key.，window没有提供现成的函数，提供两个参数可以直接连接wifi，wifi 连接过程也是有学问的，
那就是要提供一个profile ，]]></description><category></category></item><item><title><![CDATA[【Window】获取电脑连接的网络信息]]></title><link>https://blog.youkuaiyun.com/Jammg/article/details/53443257</link><guid>https://blog.youkuaiyun.com/Jammg/article/details/53443257</guid><author>Jammg</author><pubDate>Sat, 03 Dec 2016 11:16:05 +0800</pubDate><description><![CDATA[1. 连接的Wifi信息


	WSAData data;
	if (WSAStartup(MAKEWORD(1, 1), &data) != 0)
	{
		return;
	}

	DWORD dwError = ERROR_SUCCESS;
	DWORD dwActualVresion;
	HANDLE wlanHandle;

	dwError = WlanOpenHandle(1,]]></description><category></category></item><item><title><![CDATA[【H264】x264头文件结构体详解]]></title><link>https://blog.youkuaiyun.com/Jammg/article/details/53443167</link><guid>https://blog.youkuaiyun.com/Jammg/article/details/53443167</guid><author>Jammg</author><pubDate>Sat, 03 Dec 2016 11:02:37 +0800</pubDate><description><![CDATA[/*****************************************************************************
 * x264.h: x264 public header
 *****************************************************************************
 * Copyright]]></description><category></category></item><item><title><![CDATA[【Window编程】内核对象]]></title><link>https://blog.youkuaiyun.com/Jammg/article/details/52800862</link><guid>https://blog.youkuaiyun.com/Jammg/article/details/52800862</guid><author>Jammg</author><pubDate>Wed, 12 Oct 2016 21:22:12 +0800</pubDate><description><![CDATA[内核对象
    比如存取符号对象、事件对象、文件对象、文件映射对象、
    I / O完成端口对象、作业对象、信箱对象、互斥对象、管道对象、进程对象、信标对象、线程
    对象和等待计时器对象等


1. 每个内核对象只是内核分配的一个内存块，并且只能
   由该内核访问。该内存块是一种数据结构，它的成员负责维护该对象的各种信息


2. 句柄指向 内核对象 ，为了使操作]]></description><category></category></item><item><title><![CDATA[【Intel(R)_Media_SDK】官方文档翻译摘要]]></title><link>https://blog.youkuaiyun.com/Jammg/article/details/52798434</link><guid>https://blog.youkuaiyun.com/Jammg/article/details/52798434</guid><author>Jammg</author><pubDate>Wed, 12 Oct 2016 16:59:58 +0800</pubDate><description><![CDATA[【前言】


Intel media SDK调用系统底层库完成硬编解码，处理视频，库分用器如下






有很多硬解码库，不同的GPU可以使用不同的库，有些库也有可能为了跨硬件，就会像上图那样有个分层器，根据硬件类型选择不同的库进行硬解码，
相关库有：



DXVA Microsoft DirectX
CUDA 英伟达推出
CUVID 英伟达推出
等]]></description><category></category></item><item><title><![CDATA[【Window】 Screen capture with GDI&DX]]></title><link>https://blog.youkuaiyun.com/Jammg/article/details/52788603</link><guid>https://blog.youkuaiyun.com/Jammg/article/details/52788603</guid><author>Jammg</author><pubDate>Tue, 11 Oct 2016 15:49:39 +0800</pubDate><description><![CDATA[【前言】
window常见抓屏技术有 GDI \ DX \ DXGI,
关系如下：



GDI（Graphics Deveice Interface,图形设备接口），利用GDI编程，可以不考虑硬件的具体特性，直接调用Windows API中的图形处理函数处理当前DC即可。这的确很方便，但却是以降低处理速度为代价。因为它不能直接访问硬件，需要通过操作系统间接访问。
Microfost ]]></description><category></category></item><item><title><![CDATA[BMP文件格式]]></title><link>https://blog.youkuaiyun.com/Jammg/article/details/52788448</link><guid>https://blog.youkuaiyun.com/Jammg/article/details/52788448</guid><author>Jammg</author><pubDate>Tue, 11 Oct 2016 15:23:29 +0800</pubDate><description><![CDATA[因为公司的主要业务是图像识别相关的，因此对图像处理、识别是我学习的重点。虽然写程序也不少年了，但是对于图像处理领域，我还是一个新兵。对很多基础的概念也还是存在盲区，所以想在边学边做的过程中，对一些概念的梳理和学习心得进行记录。

BMP文件格式

BMP(Bitmap-File)图形文件，又叫位图文件，是Windows采用的图形文件格式，在Windows环境下运行的所有图象处理软件都支持B]]></description><category></category></item><item><title><![CDATA[【Win32笔记四】Mesasge的定义和发送——消息队列]]></title><link>https://blog.youkuaiyun.com/Jammg/article/details/52765103</link><guid>https://blog.youkuaiyun.com/Jammg/article/details/52765103</guid><author>Jammg</author><pubDate>Sun, 09 Oct 2016 11:37:57 +0800</pubDate><description><![CDATA[【讯息的定义】


PostMessage 是将一个消息寄送到一个线程的消息队列后就立即返回。
PeekMessage 该函数为一个消息检查线程消息队列，并将该消息（如果存在）放于指定的结构。
GetMessage  获取一个讯息，当第二三四参数为NULL或者0时，代表接受程式的所有讯息
SendMessage 该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序，直]]></description><category></category></item><item><title><![CDATA[【Win32笔记三】键盘]]></title><link>https://blog.youkuaiyun.com/Jammg/article/details/52764702</link><guid>https://blog.youkuaiyun.com/Jammg/article/details/52764702</guid><author>Jammg</author><pubDate>Sun, 09 Oct 2016 11:08:43 +0800</pubDate><description><![CDATA[1. 谁获得了焦点（光标）
        有时输入焦点不在任何视窗中。这种情况发生在所有程式都是最小化的时
    候。这时，Windows 将继续向活动视窗发送键盘讯息，但是这些讯息与发送给非
    最小化的活动视窗的键盘讯息有不同的形式。
        视窗讯息处理程式通过拦截WM_SETFOCUS和WM_KILLFOCUS讯息来判定它的
    视窗何时拥有输入焦点。WM_S]]></description><category></category></item><item><title><![CDATA[【Win32笔记二】视窗与消息机制]]></title><link>https://blog.youkuaiyun.com/Jammg/article/details/52764115</link><guid>https://blog.youkuaiyun.com/Jammg/article/details/52764115</guid><author>Jammg</author><pubDate>Sun, 09 Oct 2016 10:28:27 +0800</pubDate><description><![CDATA[1.标志
    字首 类别
    CS 视窗类别样式
    CW 建立视窗
    DT 绘制文字
    IDI 图示ID
    IDC 游标ID
    MB 讯息方块
    SND 声音
    WM 视窗讯息
    WS 视窗样式


    结构 含义
    MSG 讯息结构
    WNDCLASS 视窗类别结构
    PAINTSTRU]]></description><category></category></item><item><title><![CDATA[【Win32笔记一】Windows程式关键字]]></title><link>https://blog.youkuaiyun.com/Jammg/article/details/52763303</link><guid>https://blog.youkuaiyun.com/Jammg/article/details/52763303</guid><author>Jammg</author><pubDate>Sun, 09 Oct 2016 09:10:43 +0800</pubDate><description><![CDATA[1. HINSTANCE （实例句柄，应用程序） HWND（窗口句柄） 都是句柄，本质是一样的，只是从名字区分一下，它们都是handle


2. #define WINAPI __stdcall
    __stdcall 被这个关键字修饰的函数，其参数都是从右向左通过堆栈传递的(__fastcall 的前面部分由ecx,edx传)， 函数调用在返回前要由被调用者清理堆栈。]]></description><category></category></item><item><title><![CDATA[【FFmpeg(2016)】AVCodecContext解码网络流]]></title><link>https://blog.youkuaiyun.com/Jammg/article/details/52750241</link><guid>https://blog.youkuaiyun.com/Jammg/article/details/52750241</guid><author>Jammg</author><pubDate>Fri, 07 Oct 2016 16:51:20 +0800</pubDate><description><![CDATA[【前言】
一般读取视音频文件解码时，我们会使用AVFormatContext。


【对比】


简单记录一下这个只使用libavcodec的“纯净版”视频解码器和使用libavcodec+libavformat的视频解码器的不同。

（1）下列与libavformat相关的函数在“纯净版”视频解码器中都不存在。



av_register_all()：注册所有的编解码]]></description><category></category></item><item><title><![CDATA[【FFmpeg(2016)】SwrContext重采样结构体]]></title><link>https://blog.youkuaiyun.com/Jammg/article/details/52688506</link><guid>https://blog.youkuaiyun.com/Jammg/article/details/52688506</guid><author>Jammg</author><pubDate>Wed, 28 Sep 2016 11:31:45 +0800</pubDate><description><![CDATA[【前言】


在看这篇文章前，我推荐你先看看我的另外两篇文章：


【FFmpeg(2016)】视频文件分离器(demuxing)——H264&PCM

【FFmpeg(2016)】PCM编码AAC



本文章主要介绍SwrContext的用处 和 使用方法，到底什么是重采样，为什么需要重采样，希望你耐心看完。


重采样，也就是对已得到的数据进行重新的采样；比如，]]></description><category></category></item></channel></rss>