C/C++
文章平均质量分 55
baggiowangyu
这个作者很懒,什么都没留下…
展开
-
SYSTEMTIME与__int64的相互转换
<br />1. SYSTEMTIME转__int64<br />__int64 SystemTimeToInt64(const SYSTEMTIME& itime){ FILETIME ft; SystemTimeToFileTime(&itime, &ft); ULARGE_INTEGER ularge; ularge.LowPart = ft.dwLowDateTime; ularge.HighPart = ft.dwHighDateTime; __int64 int64原创 2011-03-22 12:27:00 · 8638 阅读 · 1 评论 -
关于VC出现 0x0C150002 错误的原因以及解决方案
情景重现 2013年7月29日,我在Windows 7 x86 SP1中文专业版系统环境下使用Visual Studio 2005 SP1中文版编写应用程序。 编写完成后在Windows 7 x64 英文旗舰版系统环境下运行。 悲剧的事情粗现了!程序在启动的时候弹出了 0x0c150002 的错误提示。起初我并不知道是什么原因,原创 2014-12-08 12:43:01 · 2816 阅读 · 0 评论 -
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 · 2571 阅读 · 0 评论 -
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 · 2514 阅读 · 0 评论 -
[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 · 2658 阅读 · 0 评论 -
[Win32]获取当前输入焦点窗口所属进程的进程ID
DWORD GetCurrentActiveWindowsProcessId(){ HWND hWnd = GetForegroundWindow(); DWORD processId = 0; GetWindowThreadProcessId(hWnd, &processId); return processId;}原创 2013-11-12 09:14:24 · 5028 阅读 · 0 评论 -
[Win32]获取指定进程的父进程PID
////#include #include #include typedef NTSTATUS (__stdcall * NTQUERYINFORMATIONPROCESS)( HANDLE ProcessHandle, PROCESSINFOCLASS ProcessInformationClass, PVOID ProcessInformation, ULONG Pro原创 2013-03-24 10:59:11 · 6198 阅读 · 0 评论 -
[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 · 3959 阅读 · 0 评论 -
获取当前进程文件所在目录,用于替代GetCurrentDirectory
由于GetCurrentDirectory是依赖于运行环境的,如果设置了程序启动目录,那么GetCurrentDirectory获取的是启动目录的路径。这样我们就不会得到正确的程序所在路径了。因此使用另外一种手段去获取路径是十分必要的。下面上代码:#include DWORD GetCurrentExeFilePath(DWORD aBufferSize, TCHAR *a原创 2014-12-08 12:38:05 · 1346 阅读 · 0 评论 -
内核模式下获取SSDT服务索引代码
ULONG GetDllFunctionIndex( IN CONST char* lpFunctionName ){ HANDLE hSection原创 2014-12-08 12:39:57 · 1213 阅读 · 0 评论 -
金山界面库BkWin可视化设计的一种解决方案
从以前的开发模式说起以前我在公司做界面开发的时候使用的是前任工程师留下的一个BkWin的工程模板来进行界面修改。那时候无论是界面的XML文件、资源文件中的各种包含关系都得自己一个字一个字打出来。更甚至工程模板在编译过程中会出现Release版本无法使用优化选项…其实在刚开始接触BkWin界面库的时候充满了各种烦恼。以至于后来在网上搜索发现了一个BkWin在Visual Studio 2008下的一个原创 2015-11-03 17:12:33 · 4290 阅读 · 0 评论 -
Windows文件系统过滤驱动中打开文件时如何避免重入
调用下面的函数可以避免在打开回调中打开新的文件的时候引起重入NTSTATUS IoCreateFileSpecifyDeviceObjectHint( __out PHANDLE FileHandle, __in ACCESS_MASK DesiredAccess, __in POBJECT_ATTRIBUTES ObjectAttributes, _原创 2015-02-13 17:12:03 · 2039 阅读 · 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 · 2067 阅读 · 0 评论 -
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 · 5167 阅读 · 0 评论 -
获取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 · 1573 阅读 · 0 评论 -
DirectDraw方式截取系统屏幕
//注意:需要下载Microsoft DirectX SDK开发包#include #include #include #include #include #include #include #include using namespace std;void CaptureScreenByDirectDraw(){ // 初始化阶段 BITM原创 2014-12-08 12:34:00 · 1835 阅读 · 0 评论 -
Win32下的模式匹配
代码如上。原创 2014-12-08 11:47:26 · 972 阅读 · 0 评论 -
在物理内存不足的情况下使用内存映射文件进行大内存操作
我们在写程序的过程中常常会出现程序需要占用大量内存,但是系统物理内存中根本不存在那么多的内存空间。这个时候我们一般可以考虑使用以下技术来解决问题:虚拟内存技术内存映射文件技术虚拟内存技术:虚拟内存技术是根据系统页面文件(pagefile.sys)进行页面交换达到切换内存的目的。但是究其本质,我们会发现,虚拟内存技术本质上还是通过对页面文件的交换达到提高物理内原创 2014-12-08 12:41:37 · 4040 阅读 · 0 评论 -
[Windows驱动开发](一)序言
笔者学习驱动编程是从两本书入门的。它们分别是《寒江独钓——内核安全编程》和《Windows驱动开发技术详解》。两本书分别从不同的角度介绍了驱动程序的制作方法。 在我理解,驱动程序可分为两类三种: 第一类:传统型驱动 传统型驱动的特点就是所有的IRP都需要自己去处理,自己实现针对不同IRP的派发函数。其可以分为以下两种: 1. Nt式驱原创 2012-07-29 15:38:24 · 51792 阅读 · 6 评论 -
自己写的API钩子注入QQ进程后导致QQ无法登录
今天在客户那里安装我们的产品,结果发现QQ启动后登录不了,后来去掉我们的钩子后又正常了,有时候关掉QQ进程,再打开一次就正常了。还不明白是什么原因。号称QQ有反钩子功能,但是我看不出来,QQ不能登录的时候会导致某一个CPU的占用率达到100%,看上去是在不停的重试什么。明天早上回公司再研究研究。原创 2012-07-19 23:42:38 · 3284 阅读 · 0 评论 -
遍历Windows系统的内核模块
自己做了一个工具需要遍历Windows系统加载的内核模块信息,网上查了一些都是用Zwxxx内核函数来做。后来发现完全没必要... 直接上代码:#include #include #include #include #pragma comment(lib, "psapi")#define ARRAY_SIZE 1024void EnumKernelModule(){原创 2011-12-22 13:03:04 · 3193 阅读 · 0 评论 -
ARP欺骗源代码(基于WinPcap实现)
//ArpCheat.h #ifndef MY_ARP_CHEAT_INCLUDE_H #define MY_ARP_CHEAT_INCLUDE_H //字节对齐必须是1 #pragma pack (1) struct ethernet_head { unsigned char dest_mac[6]; //目标主机MAC地址 unsigned char source_mac[转载 2011-12-18 11:58:32 · 11055 阅读 · 5 评论 -
详谈调用winpcap驱动写arp多功能工具
一 winpcap驱动简介二 Packet.dll相关数据结构及函数三 T-ARP功能及原理介绍四 T-ARP主要代码分析五 T-ARP源代码一)winpcap驱动简介winpcap(windows packet capture)是windows平台下一个免费,公共的网络访问系统。开发winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。它提供了以转载 2011-12-18 11:55:50 · 1268 阅读 · 0 评论 -
广度优先搜索与深度优先搜索
1. 广度优先代码// BreadthSearch.h/** * 广度优先搜索算法 * 记录每一层的目录路径,检查该层的所有文件 */#ifndef _BREADTHSEARCH_H_#define _BREADTHSEARCH_H_#include #include #include using namespace std;class BreadthSear原创 2011-12-06 19:47:17 · 687 阅读 · 0 评论 -
Invalid Address specified to RtlValidateHeap
<br /> 在编译的时候,exe和dll有可能链接的是静态的运行时库,也有可能链接的是dll版本的运行时库。如果在exe或者是dll中有一个链接的是静态的运行时库,那么就会存在两套内存分配的实例。所以在dll中申请的内存,到exe中释放就会失败,因为exe并不认识那块内存。解决的办法就是都使用dll版本的运行时库,这样,在进程空间内,只有一个运行时实例。原创 2011-05-18 23:43:00 · 913 阅读 · 0 评论 -
[转] 根据文件的Handle获取文件路径
<br /> 在网上搜索此类问题,搜索到有用的内容相当少,可能是因为比较少人发表这种文章,也不排除比较少人使用内核模式的办法。今晚通过在网上看到的一点资料,结合自己近期研究的课题,使用NtQueryInformationFile实现了根据文件的Handle获取文件路径,程序在VC2008下调试通过,源代码如下:<br /> <br />#include "stdafx.h"#include <windows.h>#include <tchar.h>typedef long NTST原创 2011-05-16 17:07:00 · 2527 阅读 · 1 评论 -
双机调试用户态应用程序
我在本地调试API钩子的时候经常遇到调试到一半机器就卡死了,我怀疑是不是因为钩子导致的锁死问题。所以考虑到这样决定使用双机调试。网上查了一下双机调试的方法,是主要有两种:VS2005双机调试、Windbg双机调试。从配置方法上讲VS2005配置双机调式比较简单。那我们先介绍VS2005的双机调试。VS2005双机调试约定术语:被调试端:运行调试程序的机器调试端:使用VS2005进行原创 2012-07-03 14:54:42 · 2728 阅读 · 0 评论 -
简单判断系统是否是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 · 1403 阅读 · 0 评论 -
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 · 1858 阅读 · 0 评论 -
通过进程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 · 4907 阅读 · 0 评论 -
EasyHook远程代码注入
最近一段时间由于使用MinHook的API挂钩不稳定,经常因为挂钩地址错误而导致宿主进程崩溃。听同事介绍了一款智能强大的挂钩引擎EasyHook。它比微软的detours好的一点是它的x64注入支持是免费开源的。不想微软的detours,想搞x64还得购买。 好了,闲话不多说,先下载EasyHook的开发库,当然有兴趣的同学可以下载源码进行学习。下载地址:http://easyhook.原创 2012-06-19 01:10:44 · 27685 阅读 · 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 · 816 阅读 · 0 评论 -
VC2005 编译Win7以管理员权限启动的可执行程序
由于在Vista、Win7系统增加了UAC功能,导致很多程序启动时需要用户以手动点击鼠标右键,选择“以管理员权限启动”来启动应用程序。 为了方便用户,VC程序员可以自己在程序中添加以管理员权限启动的功能,其实非常简单,将以下代码复制到记事本中,保存为.manifest后缀名的文件 <assemblyIdentity version="1.0.0.0" process原创 2011-12-23 10:40:05 · 4219 阅读 · 0 评论