http://blog.sina.com.cn/doforu[订阅]
个人资料
访客
读取中...
好友
读取中...
评论
读取中...
分类
    内容读取中…
博文
 在使用 VC、 VB、 Delphi等高级语言编写数据库应用程序时,往往需要用户自己在控制面板中配置 ODBC数据源。对于一般用户而言,配置 ODBC数据源可能是一件比较困难的工作。而且,在实际应用中,用户往往要求在同一个应用程序中访问不同的数据源,因此采用一般的加载方法就有了无法克服的缺陷。为能在程序中完成这一工作,方便应用程序的使用,本文以 VC为开发环境介绍两种在应用程序中动态加载 ODBC系统数据源的方法。 

  方法一:修改注册表 

  设计思路 

  一般情况下,当用户在控制面板中配置好 ODBC数据源后, Windows系统便在注册表中加入了一些子键来存储用户的配置结果。当应用程序需要用到数据源时, Windows便会通知底层接口查阅注册表中该数据源的配置。如果用户删除了某个 ODBC数据源,那么也会在注册表中有所反应。如果配置的数据源是用户数据源, Windows系统便会修改注册表的 HKEY_CURRENT_USER\SOFTWARE\ODBC\ODBC.INI子键;如果配置的数据源是系统数据源, Windows系统便会修改注册表的 HKEY_L
 在使用 VC、 VB、 Delphi等高级语言编写数据库应用程序时,往往需要用户自己在控制面板中配置 ODBC数据源。对于一般用户而言,配置 ODBC数据源可能是一件比较困难的工作。而且,在实际应用中,用户往往要求在同一个应用程序中访问不同的数据源,因此采用一般的加载方法就有了无法克服的缺陷。为能在程序中完成这一工作,方便应用程序的使用,本文以 VC为开发环境介绍两种在应用程序中动态加载 ODBC系统数据源的方法。 

  方法一:修改注册表 

  设计思路 

  一般情况下,当用户在控制面板中配置好 ODBC数据源后, Windows系统便在注册表中加入了一些子键来存储用户的配置结果。当应用程序需要用到数据源时, Windows便会通知底层接口查阅注册表中该数据源的配置。如果用户删除了某个 ODBC数据源,那么也会在注册表中有所反应。如果配置的数据源是用户数据源, Windows系统便会修改注册表的 HKEY_CURRENT_USER\SOFTWARE\ODBC\ODBC.INI子键;如果配置的数据源是系统数据源, Windows系统便会修改注册表的 HKEY_L
 在使用 VC、 VB、 Delphi等高级语言编写数据库应用程序时,往往需要用户自己在控制面板中配置 ODBC数据源。对于一般用户而言,配置 ODBC数据源可能是一件比较困难的工作。而且,在实际应用中,用户往往要求在同一个应用程序中访问不同的数据源,因此采用一般的加载方法就有了无法克服的缺陷。为能在程序中完成这一工作,方便应用程序的使用,本文以 VC为开发环境介绍两种在应用程序中动态加载 ODBC系统数据源的方法。 

  方法一:修改注册表 

  设计思路 

  一般情况下,当用户在控制面板中配置好 ODBC数据源后, Windows系统便在注册表中加入了一些子键来存储用户的配置结果。当应用程序需要用到数据源时, Windows便会通知底层接口查阅注册表中该数据源的配置。如果用户删除了某个 ODBC数据源,那么也会在注册表中有所反应。如果配置的数据源是用户数据源, Windows系统便会修改注册表的 HKEY_CURRENT_USER\SOFTWARE\ODBC\ODBC.INI子键;如果配置的数据源是系统数据源, Windows系统便会修改注册表的 HKEY_L

并行接口的分类: SPP(标准并行接口) ,EPP(增强型并行接口),ECP(扩展型并行端口)

  标准并行端口(SPP)也是最早的端口定义,主要功能如下,1:并行端口提供了8个数据线以进行并行的字节传输,2:计算机能够通过数据线向打印机发送选能信号,以通知打印机已经准备好接收数据,3:打印机招收到数据后,向计算机发送一个回应信号(NACK)。其各位信号线所代表的意义详见下表。

  增强型并行端口(EPP)的出现提供了一种更高性能的连接方式,并东路向下兼容所有在此之前存在的并行接口及外设。与SPP不同之处在于原来17个信号中的重新定义,在这17个信号中,EPP使用了其中的14个信号进行传输,握手和选通,剩下的3个信号可以由外设设计者有来自定义。

  并行接口的大致结构:
     
并行口一般有25个引脚,其中包括8位数据线,5位打印机状态线,4位控制线.下面将对这些引脚予以详细说明:
  (注:1:>出,表示由计算机发向打印机;入,表示由打印机发向计算机,
      2:>低电

Q UNICODE字符串如何显示
A
如果程序定义了_UNICODE宏直接用
WCHAR *str=L'unicodestring';
TextOut(0,0,str);
否则就需要转换类型
#include <comdef.h>
WCHAR *str=L'unicodestring';
bstr_t str1=str;
TextOut(0,0,(char*)str1);

Q 如何实现ANSI和UNICODE的相互转换
A
将ANSI转换到Unicode
(1)通过L这个宏来实现,例如: CLSIDFromProgID( L'MAPI.Folder',&clsid);
(2)通过MultiByteToWideChar函数实现转换,例如:
char *szProgID = 'MAPI.Folder';
WCHAR szWideProgID[128];
CLSID clsid;
long lLen = MultiByteToWideChar(CP_ACP,0,szProgID,strlen(szProgID),szWideProgID,sizeof (szWideProgID));
szWideProgID[lLen] = '\0';
(3)通过A2W宏来实现,例如:
USES_CONVERSION;
CLSIDFromProgID( A2W(szProgID),&clsid);

成为“肉鸡”后的症状:
1.当你正在浏览网页时,弹出广告是很正常的,但你没有打开浏览器时,它却自己跳出来了;
2.你在使用电脑时,弹出了警告窗口,而你却没有进行过任何危险操作;
3.某个进程长时间占用系统资源过多,而它又不是B T等下载类软件;
4.没有进行任何操作,硬盘频繁读取。要知道现在的电脑配置都很高了,除了玩游戏或运行大型软件外,很少有需要经常读写的操作。
5.经常出现某个正在使用的程序无响应,或频繁死机、重启;
6.鼠标或键盘会不听使唤;
7.软件(如浏览器)的设置被强行修改;
电脑出现异常时,一定要注意,查看一下是什么原因,是由于你安装的软件?还是电脑硬件出问题了呢?如果都不是,一定要马上解决问题,将损失降至最低点。
出现上面的问题,要立刻断网,以防入侵者窃取你的重要文件。还要注意,若某个月电话费中的信息费过高,则要立刻修改ADSL密码,入侵者很可能用它在网上消费。

教你一招怎么找到黑客留下的踪影
当电脑出现异常时,可以确定是否有别人进入到你的系统,这个方法的主角就是“系统日志”。
可以通过“控制面板→管理工具”下的“事件查看器”

 
进程的重要性体现在可以通过观察它,来判断系统中到底运行了哪些程序,以及判断系统中是否入驻了非法程序。正确地分析进程能够帮助我们在杀毒软件不起作用时,手动除掉病毒或木马。

  瞭望进程

  如何知道系统中目前有哪些进程?在Windows98/Me/2000/XP/2003中,按下“Ctrl+Alt+Delete”组合键就可以直接查看进程,或打开“Windows 任务管理器”的“进程”选项来查看进程。通常来说,系统常见的进程有winlogon.exe,services.exe,explorer.exe,svchost.exe等。要熟悉进程,首先就要熟悉最常见的系统进程,这样当发现其它奇怪的进程名(如HELLO,GETPASSWORD,WINDOWSSERVICE等等)时就方便判断了。

  常规杀灭进程法

  1.有的进程在进程选项中无法删除,这时可以打开注册表编辑器(在“开始→运行”中键入regedit),找到“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run”下面的键,将可疑的选项删除。

  2.另外,还可以通过系统的“管理工具”里面的“服务”查看目前的全部进程。这里重

1.背景
    在windows平台下,应用程序通常使用API函数来进行文件访问,创建,打开,读写文件。从kernel32的CreateFile/ReadFile/WriteFile函数,到本地系统服务,再到FileSystem及其FilterDriver,经历了很多层次。在每个层次上,都存在着安全防护软件,病毒或者后门作监视或者过滤的机会。作为安全产品开发者,我们需要比别人走得更远,因此我们需要一个底层的“windows平台内核级文件访问”的方法来确保我们能够看到正确的干净的文件系统。

2.用途
    直接的内核级别文件访问,在信息安全领域内有广泛的用途。用于入侵者的方面,可以让他绕过杀毒软件,IDS等安全保护系统的监视。用于检测者的方面,可以看到一个干净的系统,以此来查杀隐藏的后门或者rootkit。用于监控者的方面,则可以了解最新的绕过监控的技术,可以根据来设计更新的监控方案

网上看到的,感觉偷懒时用的上。

void CTestrtiDlg::OpenEXE()
{
 //SHELLEXECUTEINFO ShExecInfo = {0};
 SetCurrentDirectory('c:\\program files\\dmso\\RTI1.3ng-v6\\WINNT-4.0-VC6\\BIN');
 ShellExecute(NULL,'open','c:\\program files\\dmso\\RTI1.3ng-v6\\WINNT-4.0-VC6\\BIN\\RTIEXECD.EXE','','',SW_HIDE);
 //WaitForSingleObject(ShExecInfo.hProcess,INFINITE);
 AfxMessageBox('正在运行!');
   
}

void CTestrtiDlg::OnButton2() //检测程序是否执行完毕
{
 
 HANDLE   SnapShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);  
   
            if   (SnapShot   ==   INVALID_HANDLE_VALUE) &nb