摘要: #include <stdio.h>#include <malloc.h>void* __cdecl operator new( unsigned int size, const char *p, int line){ printf("the file :%s\n", p); printf("the line: %d\n", line); void *ret = malloc(size); return ret;}#define new new(__FILE__, __LINE__)int _tmain(int argc, _TC 阅读全文
posted @ 2012-09-20 20:59 特洛伊人 阅读(303) 评论(0) 推荐(0) 编辑
摘要: 1 ////////////////////////////////////////////////////////////////////////// 2 // Lookaside测试 3 // Lookaside一般在以下情况使用: 4 // 1.每次申请固定大小的内存 5 // 2.频繁申请释放内存 6 7 void LookasideTest() 8 { 9 KdPrint(("Entering LookasideTest function\n"));10 PAGED_LOOKASIDE_LIST lookAside;11 12 // 初始化一个分页Look... 阅读全文
posted @ 2012-09-20 10:37 特洛伊人 阅读(284) 评论(0) 推荐(0) 编辑
摘要: 1 typedef struct _MYDATA 2 { 3 LIST_ENTRY ListEntry; 4 LONG number; 5 }MYDATA, *PMYDATA; 6 7 void LinkedListTest() 8 { 9 LIST_ENTRY head;10 MYDATA *pMyData;11 PLIST_ENTRY pListEntry;12 InitializeListHead(&head);13 14 // 创建链表15 for (int i = 0; i < 10; i++)1... 阅读全文
posted @ 2012-09-20 09:56 特洛伊人 阅读(609) 评论(0) 推荐(0) 编辑
摘要: 1 #ifdef __cplusplus 2 extern "C" 3 { 4 #endif 5 #include <wdm.h> // 不同点之一 6 #ifdef __cplusplus 7 } 8 #endif 9 10 typedef struct _DEVICE_EXTENSION 11 { 12 PDEVICE_OBJECT fdo; 13 PDEVICE_OBJECT NextStackDevice; 14 UNICODE_STRING ustrDeviceName; 15 UNICODE_STRING ustrSymb... 阅读全文
posted @ 2012-09-19 09:33 特洛伊人 阅读(848) 评论(0) 推荐(0) 编辑
摘要: // 以下代码演示了在C++构造函数中抛出异常,但是析构函数却不能被调用的场景。// 所以,在C++构造函数中,既需要分配内存,又需要抛出异常时要特别注意防止内存泄露的情况发生#include "stdafx.h"#include <cassert>#include <string>#include <iostream>using namespace std;class test{public: test() : m_pBuf(NULL) { m_pBuf = new int[100]; throw std::runtime_error( 阅读全文
posted @ 2012-09-03 13:07 特洛伊人 阅读(2157) 评论(0) 推荐(0) 编辑
摘要: 通过等待函数和ReleaseSemaphore可以确保同一时刻有有限个线程访问指定的资源。以下是一个测试小程序 1 #include "stdafx.h" 2 #include <windows.h> 3 #include <stdio.h> 4 5 HANDLE hSemaphore; 6 7 typedef struct _ThreadParam{ 8 char name[100]; 9 }ThreadParam;10 11 DWORD WINAPI ThreadProc(LPVOID lpParam)12 {13 ThreadParam *pT 阅读全文
posted @ 2012-08-30 09:06 特洛伊人 阅读(236) 评论(0) 推荐(0) 编辑
摘要: mov edi,edi - hook api系统: windows xp查看系统函数的反汇编代码时会发现开头有个"mov edi,edi"(2字节),再往前则是5个nop指令(当然这不会引人注意),可是"mov edi,edi"有什么用了.上网搜索"mov edi,edi",结果让人惊奇,据说系统函数都添加了这段"无用"的代码,为的是Hot Patching,详细内容请自行搜索.通过改写代码来挂接API时,一般是移动前几个字节加入jump指令,对于"mov edi,edi"开头的函数也习惯性的这 阅读全文
posted @ 2012-07-06 14:04 特洛伊人 阅读(2881) 评论(0) 推荐(0) 编辑
摘要: 自绘Button时,需要Button表面的位图来动态调整Button的尺寸。而位图是通过LoadBitmap函数载入的,返回的也是一个HBITMAP句柄,所以无法直接获取HBITMAP的尺寸。解决方法是使用GetObject API根据HBITMAP获取BITMAP对象,有了BITMAP对象,就有了位图的文件头、尺寸以及位图数据等信息。BITMAP bmp;HBITMAP hBmp;GetObject(hBmp, sizeof(BITMAP), (LPBYTE)&bmp); 阅读全文
posted @ 2012-06-28 10:40 特洛伊人 阅读(3001) 评论(0) 推荐(0) 编辑
摘要: VC资源分配、释放表资源分配函数清除函数需要手动清除AcceleratorsLoadAcceleratorsN/ANoAtomsGlobalAddAtomGlobalFreeAtomYesBitmapsCreateBitmapDeleteObjectYes*CreateBitmapIndirectDeleteObjectYes*CreateCompatibleBitmapDeleteObjectYes*CreateDIBitmapDeleteObjectYes*CreateDiscardableBitmapDeleteObjectYes*LoadBitmapDeleteObjectYesBru 阅读全文
posted @ 2012-06-26 16:56 特洛伊人 阅读(1143) 评论(0) 推荐(0) 编辑
摘要: (in a CListCtrl class) HWND hwHeaderCtrl; int nColumnCount; hwHeaderCtrl = (HWND)this->SendMessage(LVM_GETHEADER, 0, 0); if (hwHeaderCtrl != NULL) { nColumnCount = ::SendMessage(hwHeaderCtrl, HDM_GETITEMCOUNT, 0, 0); } 阅读全文
posted @ 2012-06-18 23:14 特洛伊人 阅读(214) 评论(0) 推荐(0) 编辑