自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 收藏
  • 关注

原创 CMake编译poco c++

【代码】CMake编译poco c++

2023-09-19 10:15:52 176

原创 Qt5学习笔记:Qt两个窗口(Widget)间传递数据

Qt两个窗口(Widget)间传递数据

2022-10-31 11:51:29 3667 3

翻译 根据DLL文件生成LIB文件和def文件

首先打开VS的命令提示符,依次输入下面的命令(以VLC为例)dumpbin /exports "D:\Program Files\VideoLAN\VLC\libvlc.dll" > "D:\Program Files\VideoLAN\VLC\libvlc.def"echo EXPORTS > libvlc.deffor /f "usebackq tokens=4,* delims...

2018-03-06 11:40:32 1645

转载 [PHP基础]提升PHP效率的若干条建议

用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的"函数"(译注:PHP手册中说echo是语言结构,不是真正的函数,故把函数加上了双引号)。如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍。$row['id'] 的速度是$row[id]

2017-03-16 14:00:00 803

原创 [PHP基础]PHP,日期时间与秒数的相互转换

// 设置时区date_default_timezone_set("Asia/Shanghai");// 首先取得当前的日期和时间$date_time = date("Y-n-j-G-i-s");$date_time_seconds = date("U");echo "当前日期为:".$date_time;echo "";echo "当前日期的秒数为:".strval($date_

2017-03-16 09:50:11 3496

原创 ReactOS源码分析——内核加载器(一)

计算机BIOS读取硬盘第一个扇区的数据到内存0x7C00位置,将控制权交给主引导记录(MBR),MBR再搜索系统的活动分区表,加载活动分区表的第一个扇区到一个固定的地址。MBR接下来将控制权交给PBR,PBR解析FAT或NTFS格式文件系统,找到引导内核的文件NTLDR,将该文件加载到0x20000。最后将控制权交给NTLDR进行内核启动。原版的启动源码是一段汇编程序,这段汇编程序的路径大概是在“\

2015-11-10 00:27:20 3995

原创 金山界面库BkWin可视化设计的一种解决方案

从以前的开发模式说起以前我在公司做界面开发的时候使用的是前任工程师留下的一个BkWin的工程模板来进行界面修改。那时候无论是界面的XML文件、资源文件中的各种包含关系都得自己一个字一个字打出来。更甚至工程模板在编译过程中会出现Release版本无法使用优化选项…其实在刚开始接触BkWin界面库的时候充满了各种烦恼。以至于后来在网上搜索发现了一个BkWin在Visual Studio 2008下的一个

2015-11-03 17:12:33 4224

原创 Windows文件系统过滤驱动中打开文件时如何避免重入

调用下面的函数可以避免在打开回调中打开新的文件的时候引起重入NTSTATUS IoCreateFileSpecifyDeviceObjectHint( __out PHANDLE FileHandle, __in ACCESS_MASK DesiredAccess, __in POBJECT_ATTRIBUTES ObjectAttributes, _

2015-02-13 17:12:03 2009 1

转载 如何让MySQL开启远程连接

在MySQL数据库的User表中一般有三个用户,分别是localhost、127.0.0.1、::1,我们将localhost改为%即可开启。

2015-01-12 16:42:28 1096

原创 如何解决Windows操作系统出现USB存储设备驱动安装不上的问题

我自己是遇到了这样的问题,非常蛋疼....搞了好久,又是删注册表,又是上网找素材,没一个有用。最后还是自己搞懂了.....由于USB大容量储存设备数据设备类型中的UsbStor类型。我的设备是能正确识别到名称的,但是就是不能生成大容量存储设备,估计是安装这个类型的驱动出错了。于是我开始找安装文件。最后在C:\Windows\inf文件夹里面找到了差异:在正常的机器上有usbstor

2014-12-08 12:53:07 8486 1

原创 使用Windbg查看系统SSDT表与ShadowSSDT表

x86操作系统1. 查看当前系统是否已经载入win2k.sys的相关符号信息:kd> lmstart end module name80586000 8058f000 kdcom (deferred) 80e03000 81391000 nt (pdb symbols) d:\symb

2014-12-08 12:51:07 6751 1

原创 [Win32]获取当前系统可用磁盘空间最大的盘符

int GetMostFreeSpaceDisk(TCHAR &aDriveName){ TCHAR driveNames[MAX_PATH] = {0}; DWORD len = GetLogicalDriveStrings(MAX_PATH, driveNames); TCHAR maxDrive[MAX_PATH] = {0

2014-12-08 12:45:17 2036

原创 WMI监视进程启动

// WMIProcessCreateMonitor.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #include #include #include using namespace std;#pragma comment(lib, "wbemuuid.lib")#pragma comment(li

2014-12-08 12:44:03 5074

原创 关于VC出现 0x0C150002 错误的原因以及解决方案

情景重现        2013年7月29日,我在Windows 7 x86 SP1中文专业版系统环境下使用Visual Studio 2005 SP1中文版编写应用程序。        编写完成后在Windows 7 x64 英文旗舰版系统环境下运行。        悲剧的事情粗现了!程序在启动的时候弹出了 0x0c150002 的错误提示。起初我并不知道是什么原因,

2014-12-08 12:43:01 2751

原创 在物理内存不足的情况下使用内存映射文件进行大内存操作

我们在写程序的过程中常常会出现程序需要占用大量内存,但是系统物理内存中根本不存在那么多的内存空间。这个时候我们一般可以考虑使用以下技术来解决问题:虚拟内存技术内存映射文件技术虚拟内存技术:虚拟内存技术是根据系统页面文件(pagefile.sys)进行页面交换达到切换内存的目的。但是究其本质,我们会发现,虚拟内存技术本质上还是通过对页面文件的交换达到提高物理内

2014-12-08 12:41:37 3999

原创 内核模式下获取SSDT服务索引代码

ULONG GetDllFunctionIndex( IN CONST char* lpFunctionName ){ HANDLE hSection

2014-12-08 12:39:57 1186

原创 获取Windows系统版本号以及位数(兼容Win8)

#include int GetSystemVersionInfoEx(OSVERSIONINFOEX &osvi, SYSTEM_INFO &si){ const int BUFSIZE = 80; typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO); PGNSI pGNSI = NULL;

2014-12-08 12:39:13 1553

原创 获取当前进程文件所在目录,用于替代GetCurrentDirectory

由于GetCurrentDirectory是依赖于运行环境的,如果设置了程序启动目录,那么GetCurrentDirectory获取的是启动目录的路径。这样我们就不会得到正确的程序所在路径了。因此使用另外一种手段去获取路径是十分必要的。下面上代码:#include DWORD GetCurrentExeFilePath(DWORD aBufferSize, TCHAR *a

2014-12-08 12:38:05 1320

原创 DirectDraw方式截取系统屏幕

//注意:需要下载Microsoft DirectX SDK开发包#include #include #include #include #include #include #include #include using namespace std;void CaptureScreenByDirectDraw(){ // 初始化阶段 BITM

2014-12-08 12:34:00 1805

原创 GDI+方式截取系统屏幕

#include #include #include using namespace std;#pragma comment(lib, "gdiplus")int GetEncoderClsid(const TCHAR *format, CLSID *pClsid){ //using namespace Gdiplus; UINT num = 0;

2014-12-08 12:32:55 2536

原创 GDI方式截取系统屏幕

#include #include using namespace std;void CaptureScreenByGDI(){ HDC hDC = CreateDC(_T("DISPLAY"), NULL, NULL, NULL); int nScreenWidth = GetDeviceCaps(hDC, HORZRES); int

2014-12-08 12:31:44 2480

原创 Win32下的模式匹配

代码如上。

2014-12-08 11:47:26 953

原创 [Win32]获取QQ密码输入框所属进程ID

这个得分32位和64位系统。由于QQ的保护驱动挂钩了NtOpenProcess,因此在32位下无法在用户态通过获取QQ加载模块来判断是否是登陆框。先来64位的:BOOL IsQQPasswordProcessInWow64(__in DWORD aProcessId){ int errCode = ERROR_SUCCESS; TCHAR dbgStr[1024] = {

2013-11-12 09:18:37 2622

原创 [Win32]获取当前输入焦点窗口所属进程的进程ID

DWORD GetCurrentActiveWindowsProcessId(){ HWND hWnd = GetForegroundWindow(); DWORD processId = 0; GetWindowThreadProcessId(hWnd, &processId); return processId;}

2013-11-12 09:14:24 4989

转载 KdPrint使用方法

格式说明符 类型%c ANSI字符 char%C 宽字符 wchar_t%d,%i 十进制有符号整数 int%D 十进制__int64 __int64%I IRP主功能代码和次功能代码 PIRP%l 十六进制的__int64 __int64

2013-08-15 17:26:10 1575

原创 [Win32]根据主机名、域名、IP字符串获取IP地址

/////** * 根据输入的字符串(主机名、域名、IP)获取IP地址 * 返回值为初始化addr域的SOCKADDR_IN结构体 */SOCKADDR_IN GetIpAddressByName(const TCHAR *aName){ char hostName[1024] = {0}; SOCKADDR_IN addr; ZeroMemory(&addr, sizeof

2013-03-26 10:29:12 3928

原创 [Win32]获取指定进程的父进程PID

////#include #include #include typedef NTSTATUS (__stdcall * NTQUERYINFORMATIONPROCESS)( HANDLE ProcessHandle, PROCESSINFOCLASS ProcessInformationClass, PVOID ProcessInformation, ULONG Pro

2013-03-24 10:59:11 6175

原创 [Windows驱动开发](四)内存管理

一、内存管理概念1. 物理内存概念(Physical Memory Address)    PC上有三条总线,分别是数据总线、地址总线和控制总线。32位CPU的寻址能力为4GB(2的32次方)个字节。用户最多可以使用4GB的真实物理内存。PC中很多设备都提供了自己的设备内存。这部分内存会映射到PC的物理内存上,也就是读写这段物理地址,其实读写的是设备内存地址,而不是物理内存地址。

2012-09-03 09:48:27 13164 4

原创 [Windows驱动开发](三)基础知识——驱动例程

一、NT式驱动的基本例程1. 驱动入口函数——DriverEntry// 驱动程序的一般性定义NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegistryPath);// DriverEntry的主要工作是对驱动程序进行初始化。它由系统进程System调用的。驱动被加

2012-08-07 17:25:16 16246 1

原创 [Windows驱动开发](二)基础知识——数据结构

本节主要介绍驱动开发的一些基础知识。    1. 驱动程序的基本组成        1.1. 最经常见到的数据结构               a. DRIVER_OBJECT驱动对象// WDK中对驱动对象的定义// 每个驱动程序都会有一个唯一的驱动对象与之对应// 它是在驱动加载时被内核对象管理程序创建的typedef struct _DRIVER_OBJECT

2012-08-01 22:30:21 14739 2

原创 [Windows驱动开发](一)序言

笔者学习驱动编程是从两本书入门的。它们分别是《寒江独钓——内核安全编程》和《Windows驱动开发技术详解》。两本书分别从不同的角度介绍了驱动程序的制作方法。    在我理解,驱动程序可分为两类三种:    第一类:传统型驱动        传统型驱动的特点就是所有的IRP都需要自己去处理,自己实现针对不同IRP的派发函数。其可以分为以下两种:        1. Nt式驱

2012-07-29 15:38:24 51375 6

原创 自己写的API钩子注入QQ进程后导致QQ无法登录

今天在客户那里安装我们的产品,结果发现QQ启动后登录不了,后来去掉我们的钩子后又正常了,有时候关掉QQ进程,再打开一次就正常了。还不明白是什么原因。号称QQ有反钩子功能,但是我看不出来,QQ不能登录的时候会导致某一个CPU的占用率达到100%,看上去是在不停的重试什么。明天早上回公司再研究研究。

2012-07-19 23:42:38 3256

原创 简单判断系统是否是Windows 64位

#include "stdafx.h"#include #include using namespace std;int _tmain(int argc, _TCHAR* argv[]){ SYSTEM_INFO sysInfo; GetNativeSystemInfo(&sysInfo); if (sysInfo.wProcessorArchitecture == PRO

2012-07-12 16:02:31 1389

原创 双机调试用户态应用程序

我在本地调试API钩子的时候经常遇到调试到一半机器就卡死了,我怀疑是不是因为钩子导致的锁死问题。所以考虑到这样决定使用双机调试。网上查了一下双机调试的方法,是主要有两种:VS2005双机调试、Windbg双机调试。从配置方法上讲VS2005配置双机调式比较简单。那我们先介绍VS2005的双机调试。VS2005双机调试约定术语:被调试端:运行调试程序的机器调试端:使用VS2005进行

2012-07-03 14:54:42 2707

原创 DLL远程注入代码

BOOL RtlFileExists(WCHAR* InPath){ HANDLE hFile; if((hFile = CreateFileW(InPath, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL)) == INVALID_HANDLE_VALUE) return FALSE; Cl

2012-06-23 13:59:46 1842

转载 通过进程ID获取进程主窗口句柄

typedef struct tagWNDINFO { DWORD dwProcessId; HWND hWnd; }WNDINFO, *LPWNDINFO; BOOL CALLBACK YourEnumProc(HWND hWnd, LPARAM lParam) { DWORD dwProcessId; GetWindow

2012-06-23 13:56:26 4844

原创 EasyHook远程代码注入

最近一段时间由于使用MinHook的API挂钩不稳定,经常因为挂钩地址错误而导致宿主进程崩溃。听同事介绍了一款智能强大的挂钩引擎EasyHook。它比微软的detours好的一点是它的x64注入支持是免费开源的。不想微软的detours,想搞x64还得购买。    好了,闲话不多说,先下载EasyHook的开发库,当然有兴趣的同学可以下载源码进行学习。下载地址:http://easyhook.

2012-06-19 01:10:44 26896 7

原创 STL::queue 队列使用简要说明

话不多说,直接上例子// testQueue.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include using namespace std;int _tmain(int argc, _TCHAR* argv[]){ queue iQ; // 入队 cout<<"入队:"<<endl; for (int

2012-04-13 10:59:31 793

原创 VC2005 编译Win7以管理员权限启动的可执行程序

由于在Vista、Win7系统增加了UAC功能,导致很多程序启动时需要用户以手动点击鼠标右键,选择“以管理员权限启动”来启动应用程序。    为了方便用户,VC程序员可以自己在程序中添加以管理员权限启动的功能,其实非常简单,将以下代码复制到记事本中,保存为.manifest后缀名的文件 <assemblyIdentity version="1.0.0.0" process

2011-12-23 10:40:05 4176

原创 遍历Windows系统的内核模块

自己做了一个工具需要遍历Windows系统加载的内核模块信息,网上查了一些都是用Zwxxx内核函数来做。后来发现完全没必要...    直接上代码:#include #include #include #include #pragma comment(lib, "psapi")#define ARRAY_SIZE 1024void EnumKernelModule(){

2011-12-22 13:03:04 3138

空空如也

空空如也

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

TA关注的人

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