- 博客(89)
- 资源 (8)
- 收藏
- 关注
原创 windows 普通用户 使用管理员权限运行程序
#include #include#pragma comment (lib,"userenv.lib") DWORD dwSize;HANDLE hToken;LPVOID lpvEnv;PROCESS_INFORMATION pi = {0};STARTUPINFOW si = {0};WCHAR s
2010-04-28 20:00:00 1663
原创 MFC获取计算机名
char userName[MAX_PATH]; CString sUsername; DWORD size=MAX_PATH; ::GetComputerName(userName,&size); sUsername.Format("%s",userName);
2010-04-25 22:54:00 772
原创 CString 转LPCWSTR
int _convert; UINT _acp = GetACP(); LPCSTR _lpa; LPCWSTR pwcStr = A2CW((LPCSTR)sUsername);
2010-04-25 22:51:00 579
原创 cmp 指令
cmp 是比较指令,相当于不保存结果的减法指令,但影响标志寄存器cmp ax,bxax=bx, 则ZF=1ax!=bx, 则ZF=0axaxax>bx, 则CF=0ax>=bx,则CF=0或ZF=1 相关链接:标志寄存器
2008-12-12 15:51:00 656
原创 标志寄存器
按位起作用15 14 13 12 11 OF 10 DF 09 IF 08 TF 07 SF 06 ZF05 04 AF 03 02 PF 01 00 CF
2008-12-12 14:57:00 566
原创 汇编加减乘除
加add 寄存器 数据 add ax,8add 寄存器,寄存器 add ax,bxadd 寄存器,内存单元 add ax,[0]add 内存单存,寄存器 add [0],bx adc带进位加法指令 adc 操作对象1,操作对象2,则结果等于 操作对象1=操作对象1+操作对象2+CF 减sub 寄存器 数
2008-12-12 10:16:00 593
原创 汇编debug命令
r 查看 改为CPU寄存器的内容r 修改 ax寄存器的值 改完后AX=1000 d 查看内存中的内容 命令格式 d 段地址:偏移地址 结尾偏移地址 没有结尾偏移地址的话,就从开始输出128个字节的内容 e 改写内存的内容 u 查看内存中机器码的含义 t 执行当前CS:IP指向的指令 当前1000:0000的指令是 MOV AX,000
2008-12-03 12:59:00 1616 1
原创 jmp 偏移地址的计算方法
E9的jmp距离计算:距离=目的地址-(当前地址+5)(加5是因为JMP命令共占5个字,实际是目的地址减去JMP命令的尾地址,即当前地址+5如目标地址为 f1e0b63e 当前地址为 8093c6d8距离=f1e0b63e -8093c6d8-5=714cef61jmp为当前地址 当前编码 汇编指令8093c6d8 e961ef4c71(按字倒着写
2008-12-03 12:53:00 2797
原创 汇编之寄存器
AX、BX、CX、DX用来存在一般性的数据,称为通用寄存器CX用于存放 loop 的循环次数CS为代码段寄存器,IP为指令指针寄存器 CS:IP指向的内容为当前要执行的指令 CS:IP=CS*N+IP(N为CPU的字长) 修改CS,IP的内容,要用JMP,而不能用MOV,MOV可以修改通用寄存器的内容,但不能修改CS,IP的内容 如:jmp 2000:3,执行后,CS=20
2008-11-27 20:38:00 301
原创 命令模式(Command Pattern)
命令模式(Command Pattern):将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象,命令模式也支持可撤销的操作。 实例:可编程遥控器,每个按钮可自定义设置各种家电命令,但家电厂商种类繁多,不同家电的命令不同,要使遥控器与命令分离 JAVA代码class Light{ String location; int
2008-11-25 21:29:00 270
原创 将UTF8转成ANSISTRING
char * UTF8TOANSI(char *strUTF8){ WCHAR* strA; int i= MultiByteToWideChar ( CP_UTF8 , 0 ,(char*) strUTF8 ,-1 ,NULL,0);
2008-11-24 21:45:00 385
原创 判断字符串是否UTF8编码
UTF8是以8bits即1Bytes为编码的最基本单位,当然也可以有基于16bits和32bits的形式,分别称为UTF16和UTF32,但目前用得不多,而UTF8则被广泛应用在文件储存和网络传输中。 编码原理 先看这个模板: UCS-4 range (hex.) UTF-8 octet sequence (binary) 0000 0000-0000 007F 0xxx
2008-11-24 20:05:00 557
原创 驱动层分别使用PEB和sectionObject获取进程执行文件全路径的方法
本人是在WIN2003 SP2下开发的,请注意不同操作系统的偏移量不同 PEB EPROCESS->PEB(_PEB)->ProcessParameters((_RTL_USER_PROCESS_PARAMETERS)->ImagePathName(_UNICODE_STRING)void GetProcessName( IN OUT PCHAR pszName){
2008-11-19 15:39:00 2023
原创 PEB 结构导出(WINXP和WIN2003)
WINXPlkd> DT NT!_PEB +0x000 InheritedAddressSpace : UChar +0x001 ReadImageFileExecOptions : UChar +0x002 BeingDebugged : UChar +0x003 SpareBool : UChar +0x004 Mutant :
2008-11-19 15:37:00 744
原创 EPROCESS 的结构导出(WINXP和WIN2003)
WINXP lkd> dt nt!_EPROCESS +0x000 Pcb : _KPROCESS +0x06c ProcessLock : _EX_PUSH_LOCK +0x070 CreateTime : _LARGE_INTEGER +0x078 ExitTime : _LARGE_INTEGER
2008-11-19 15:34:00 925
原创 使用SetWindowsHookEx监控全局鼠标(双击右键)
HHOOK SetWindowsHookEx( int idHook, // 钩子的类型,即它处理的消息类型 HOOKPROC lpfn, // 钩子子程的地址指针。如果dwThreadId参数为0 // 或是一个由别的进程创建的线程的标识, // lpfn必须指向DLL中的钩子子程。 // 除此以外,lpfn可以指向当前进程的一段钩子子程代码。 // 钩子
2008-11-16 16:51:00 1220
原创 用RegisterHotKey为程序注册系统热键
RegisterHotKey 函数功能:该函数定义一个系统范围的热键。 函数原型:BOOL RegisterHotKey(HWND hWnd,intid,UINT fsModifiers,UINT vk); 参数: hWnd:接收热键产生WM_HOTKEY消息的窗口句柄。若该参数NULL,传递给调用线程的WM_HOTKEY消息必须在消息循环中中进行处理。 id:定
2008-11-15 16:37:00 561
原创 枚举IHTMLDocument2中所有IFRAME的内容
#include #include #include #include #include void EnumFrame( IHTMLDocument2 *pHTML ){ CComQIPtr spContainer( pHTML ); if( spContainer ) { CComPtr spEnume
2008-11-15 09:09:00 1118
原创 使用IHTMLDocument2操作IE命令
HRESULT hr;IOleCommandTarget *pCmd; hr=spDoc->QueryInterface(IID_IOleCommandTarget,(void **)&pCmd); if ( SUCCEEDED(hr) ){ VARIANT VA;//输入参数 VA.vt=VT_BSTR; VA.bstrVal=O
2008-11-15 09:06:00 595
原创 通过窗口句柄,获取IE控件里的内容(获取IHTMLDocument2和HTML)
char str[128];GetClassName(hwnd,str,sizeof(str));//获取类名 if(strcmp(str,"Internet Explorer_Server")==0){ CoInitialize( NULL ); HINSTANCE hInst = ::LoadLibrary( _T("OLEACC.DLL") );
2008-11-15 08:26:00 2577
原创 枚举所有窗口
BOOL CALLBACK EnumChildWindows(HWND hwnd, LPARAM lParam){ char str[1000]; GetWindowText(hwnd,str,sizeof(str));//获取窗口标题 CString temp(str); AfxMessageBox(temp); G
2008-11-15 07:49:00 2579
原创 DDK sources文件
TARGETNAME=helloTARGETPATH=objTARGETTYPE=DRIVERDRIVERTYPE=FSSOURCES=hello.c / ifany.c TARGETNAME 指生成的目标名称,此为hello.sysTARGETPATH 指生成的目标路径 这里为hello.c文件所在文件夹下的obj文件夹TARG
2008-11-07 15:53:00 900
原创 DDK makefile文件
!IF 0Copyright (C) Microsoft Corporation, 1999 - 2002Module Name: makefile.Notes: DO NOT EDIT THIS FILE!!! Edit ./sources. if you want to add a new source file to t
2008-11-07 15:51:00 570
原创 DDK 最纯净的Hello world
只包含DriverEntry,IRP_MJ_DEVICE_CONTROL,DriverUnload函数是DDK的基本结构没有任何功能,所有DDK都要以这个结构来写 #include #define DEVICE_NAME L"//Device//hello" #define DOS_NAME L"//??//hello" void Unl
2008-11-07 15:42:00 711
原创 单件模式(Singleton Pattern)
单件模式(Singleton Pattern):确保一个类只有一个实例,并提供一个全局访问点.注:某些类拥有多个实例是不必要,不安全的,比如注册表管理理,线程池,连接池等等 class Singleton{ private static Singleton uniqueInstance; private Singleton() { }
2008-10-29 20:27:00 221
原创 抽象工厂模式(Abstract Factory Pattern)
抽象工厂模式(Abstract Factory Pattern):提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类. 实例:使用抽象工厂,生产不同区域的PIZZA原料,使得只需使用一个工厂接口,生产各地原料,而且不需在类中实例化 注:其实抽象工厂就是将工厂方法中的Create方法定义成接口,所以抽象工厂和简单工厂有时可以互相实现
2008-10-29 19:58:00 248
原创 工厂方法模式(Factory Pattern)
工厂方法模式(Factory Pattern):定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个.工厂方法让类把例化推迟到子类 实例:PIZZA分店需制作不同类型的PIZZA,但制作过程要保持总店的规则 代码:JAVA import java.util.ArrayList;abstract class Pizza{ String na
2008-10-27 10:24:00 316
原创 八皇后问题(n皇后问题):递归和非递归的解法(C++)
八皇后问题:在8*8格的棋盘上,放8个皇后,任意两个皇后不能在同一行,同一列,同一斜线上,求有几种摆法 n皇后问题:在n*n格的棋盘上,放n个皇后,任意两个皇后不能在同一行,同一列,同一斜线上,求有几种摆法 #include "stdafx.h" #include #include using namespace std;//非递归 voi
2008-10-22 08:24:00 1541 1
原创 装饰者模式(Decorator Pattern)
装饰者模式(Decorator Pattern):动态地将责任附加到对象上.若要扩展功能,装饰者提供了比继承更有弹性的替代方案注:装饰者模式的,常常造成设计中有大量的小类,在实例化组件时增加代码的复杂度 实例:连锁咖啡店订单系统,如果使用继承的方法,每种饮料,以加入的调料不同而声明不同的类,那么”类爆炸”就不幸地发生了 代码:JAVAabstract class
2008-10-21 19:42:00 268
原创 观察者模式(Observer Pattern)
观察者模式(Observer Pattern):定义了对象之间的一对多依赖,这样一样,当一个对象(主题)改变状态时,它的所有依赖者(观察者)都会收到通知并自动更新注:可以使用推或拉的方法,推(主题自动更新数据),拉(观察者主动更新数据,例如使用getter方法) 实例:气象站要实时通知布告板更新数据,布告板应该能灵活地增加分析:如果在气象站里直接接加布告板则违反了针对接口编程的原则
2008-10-17 07:16:00 299
原创 MFC 禁用关闭按钮
CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){ pSysMenu->EnableMenuItem( SC_CLOSE, MF_BYCOMMAND|MF_GRAYED);}
2008-10-15 10:46:00 1733
原创 程序重启
char szFileName[MAX_PATH]; GetModuleFileName(theApp.m_hInstance, szFileName, MAX_PATH); ShellExecute(NULL, "Open", szFileName, NULL, NULL, SW_SHOWNORMAL);exit(0);
2008-10-15 09:52:00 278
原创 策略模式(Strategy Pattern)
策略模式(Strategy Pattern):定义算法族,分别封装起来,让它们之间可以互相替换,比模式让算法的变化独立于使用算法的客户. 实例:需要实现鸭子的行为(叫和飞),但有些鸭子是不会飞的,而且不同鸭子的叫声不同.分析:如果使用继承的方法,代码会在多个子类重复,运行时的行为不容易改变,改变会牵一发动全身 代码:JAVAinterface Fly
2008-10-14 21:53:00 262
原创 关于windows驱动开发的几个专有名词的解释(DDK,WDM,IFS,VXD)
文件系统驱动是windows系统中最复杂的驱动种类之一。它的全称 IFS DDK 是指可安装文件系统 设备驱动程序开发工具。这方面的资料非常少 DDK 是指设备驱动程序开发工具 WDM(Win32 Driver Model),即Win32驱动程序模型 旨在通过提供一种灵活的方式来简化驱动程序的开发。在实现对新硬件的支持上,减少并降低了所必须开发的驱动程序的数量和复杂性。除了通用的平
2008-09-07 13:33:00 640 1
原创 c++ 读写剪贴板
写:if(OpenClipboard()){ CString str; HANDLE hClip; char *pBuf; EmptyClipboard(); str="879789789"; hClip=GlobalAlloc(GMEM_MOVEABLE,str.GetLength()+1); pBuf=(char*)GlobalLock(hClip);//将句柄转换为指针!
2008-09-01 09:34:00 305
原创 MFC dll 与 exe调用 Recources的区别
今天搞了一个上午,在EXE中能运行的,但在生成DLL调用后出错在EXE中:FindResource(0,MAKEINTRESOURCE(IDR_SYS1),"SYS");DWORD dwWritten,dwSize=SizeofResource(NULL,hr);LoadResource(NULL,hr); 句柄都指向NULL,指向默认的当前EXE,所以在EXE 调用DLL
2008-08-01 11:16:00 524
原创 使用lib.exe生成.lib文件
今天想用一用sqlite,但是下载后发现只有DLL,没有LIB,只能自己生成了.在H:/Program Files/Microsoft Visual Studio 8/VC/bin里面有个lib.exe用拿生成lib,但默认是不能运行的,缺少几个文件把H:/Program Files/Microsoft Visual Studio 8/Common7/IDE 里面的mspdb80.dll,mspd
2008-07-29 20:32:00 7626 1
原创 VS2005 把Edit Control(编辑框) 设为多行(Multiline)的方法.
把Auto HScroll 设为FALSE把MultiLine 设为TRUE
2008-07-28 11:10:00 709
原创 ASP.NET Redirect 后无法Alert的问题
解决方法就是用JavaScript重定向页面,不用RedirectResponse.Write("alert(添加成功!);window.location.href=zw.aspx ");
2008-05-26 16:10:00 440 1
PASerror
2008-05-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人