※天道酬勤※

§水至清则无鱼,人至察则无徒§
posts - 65, comments - 11, trackbacks - 0, articles - 0
  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

VC产生的临时文件有时真的很烦人!当你编译一个程序,突然系统弹出一个对话框:“D盘已经没有足够的空间~~~~~~~~~请问需要进行磁盘清理吗”,而它只能清掉了Nkb的东东,你有什么理由不自己写一个专门清理VC垃圾的小工具呢?隔一段时间运行一次,彻底清除指定类型的垃圾文件:干干净净,中国人,奇强!
  很明显,这个程序的核心代码肯定是一个有通配符的功能的递归查找文件的函数。我的想法是先查找给定目录下的所有符合条件的文件,再递归查找下级文件夹下所有符合条件的文件。为了保证其封闭性,我用了一个 CStringList& 变量来保存搜索结果。如果您有好的建议,请给我发邮件。下面是代码:

CStringList& CDelTempDlg::SearchFile(CString strFileName,
 CString strPath,
 CStringList &listFileName)
{
 char szFullPathName[MAX_PATH];
 /*static*/ WIN32_FIND_DATA findData;

 SetCurrentDirectory(strPath);

 HANDLE hFindHandle = FindFirstFile(strFileName, &findData);

 if ((hFindHandle != INVALID_HANDLE_VALUE))
 {
 if (!(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
 {
 GetFullPathName(findData.cFileName,
 MAX_PATH,
 szFullPathName,
 NULL);

 listFileName.AddTail(szFullPathName);
 }
 while (FindNextFile(hFindHandle, &findData) != 0)
 {
 if (!(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
 {
 GetFullPathName(findData.cFileName,
 MAX_PATH,
 szFullPathName,
 NULL);

 listFileName.AddTail(szFullPathName);
 }
 }
 FindClose(hFindHandle);
 }

 hFindHandle = FindFirstFile(\"*\", &findData);
 if ((hFindHandle != INVALID_HANDLE_VALUE))
 {
 if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
 {
 if (findData.cFileName[0] != \''.\'')
 {
 SearchFile(strFileName,
 findData.cFileName,
 listFileName);

 SetCurrentDirectory(\"..\");
 }
 }

 while (FindNextFile(hFindHandle, &findData) != 0)
 {
 if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
 {
 if (findData.cFileName[0] != \''.\'')
 {
 SearchFile(strFileName,
 findData.cFileName,
 listFileName);

 SetCurrentDirectory(\"..\");
 }
 }
 }
 FindClose(hFindHandle);
 }

 return listFileName;
}
  另外,程序中还用到了 SHBrowseForFolder、SHGetPathFromIDList 两个API函数来打开文件夹选择的对话框,GetProvateProfileInt、Get(/Write)PrivateProfileString、WritePrivateProfileSection 等函数以方便用户自定义文件类型

posted @ 2006-07-29 08:01 五指魅力 阅读(152) | 评论 (0)编辑 收藏

在网页的特效制作中,经常要用到定时器,比如:间隔一定时间后页面自动跳转,或者间隔一定时间出现某种效果,像网页上的飞雪连天,或者背景颜色的定时改变等等。
 若要页面定时跳转,简单的可以在head头部的meta标记中设定重定向就可以了。但我要说的是javascript中的定时器,它的功能是十分强大和有用的。
 在javascript中有两个关于定时器的函数,它们是:
 1.倒计定时器:timename=setTimeout("function();",delaytime);
 2.循环定时器:timename=setInterval("function();",delaytime);
 其中倒计定时器顾名思义,是设定一段时间后执行function()函数,而循环定时器则是每隔一段时间都执行function()函数一次。
 倒计定时器一般用在一段时间后的触发的事件,比如页面的定时跳转,有一些站点就是在注册完成后自动跳转到登录页面,或者用于确定是“老客”还是“新客”,是老客则会点击确定的某个地方(由站长设定)而快速进入站点,如果是“新客”,就不知道特定的点击处,所以可以设定5秒或者10秒转入新客页面。
 循环定时器则用于页面上的持续效果,比如背景用飞雪。
 function()函数,可以是一个函数,也可以是几个函数,中间用;连接,还可以接入javawcript的语句。
 delaytime则是设定间隔的时间,以毫秒为单位。
 有时候,我们想把一个定时器去掉,像循环定时器就是一直不停的运动的。可以用clearTimeout(timename)来清除setTimeout()定时器,而setInterval()则用clearInterval(timename)来清除。

posted @ 2006-07-29 08:01 五指魅力 阅读(98) | 评论 (0)编辑 收藏

Point mousepoint=PointToClient(MousePostion);

Cursor mycur=new Curdor(..\*.cur);

Clipboard.SetDataObject("ssss",false) 当第二个参数为true时,程序退出时不释放剪贴板的内容
Clipboard.SetDataOject(Object);

public static IDataObject GetDataObject() 获取剪贴板的内容
需要利用两个重载函数: bool GetDataPresent(Type); object GetData(Type);

在利用 XmlTextWriter mywrite=new XmlTextWriter(@"C:\Xmldata\myxml.xml",System.Text.UTF8Encoding)时
可以调用mywriter.WriterStartDocument();

mywriter.WriteElementString("Video","Gone with the wind")的结果为

要写子元素,先用WriteStartElement打开元素,再往里面写子元素,最后用WriteEndElement关闭个元素

添加属性 mywriter.WriteStartElement("Length");
mywriter.WriteAttributeString("Messurement","Minutes");
mywriter.WriteString("120");
mywriter.WriteEndElement();

结果为:120

在XML中可以保留空白:
方法一:添加xml:space属性,如:Data;
方法二:在代码中把PreserveWhitespace属性设为True;
如: XmlDocument xmlDoc=new XmlDocument();
 xmlDoc.PreserveWhitespace=true; xmlDoc.Load("c:\\test.xml");

posted @ 2006-07-29 08:00 五指魅力 阅读(93) | 评论 (0)编辑 收藏

int i = 100;
long l = 2001;
float f=300.2;
double d=12345.119;
char username[]="学习";
char temp[200];
char *buf;
CString str;
_variant_t v1;
_bstr_t v2;

一、其它数据类型转换为字符串


短整型(int)
itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制
itoa(i,temp,2); ///按二进制方式转换
长整型(long)
ltoa(l,temp,10);
浮点数(float,double)
用fcvt可以完成转换,这是MSDN中的例子:
int decimal, sign;
char *buffer;
double source = 3.1415926535;
buffer = _fcvt( source, 7, &decimal, &sign );
运行结果:source: 3.1415926535 buffer: '31415927' decimal: 1 sign: 0
decimal表示小数点的位置,sign表示符号:0为正数,1为负数
CString变量
str = "2008北京奥运";
buf = (LPSTR)(LPCTSTR)str;
BSTR变量
BSTR bstrValue = ::SysAllocString(L"程序员");
char * buf = _com_util::ConvertBSTRToString(bstrValue);
SysFreeString(bstrValue);
AfxMessageBox(buf);
delete(buf);
CComBSTR变量
CComBSTR bstrVar("test");
char *buf = _com_util::ConvertBSTRToString(bstrVar.m_str);
AfxMessageBox(buf);
delete(buf);

_bstr_t变量
_bstr_t类型是对BSTR的封装,因为已经重载了=操作符,所以很容易使用
_bstr_t bstrVar("test");
const char *buf = bstrVar;///不要修改buf中的内容
AfxMessageBox(buf);


通用方法(针对非COM数据类型)
用sprintf完成转换

char buffer[200];char c = '1';int i = 35;long j = 1000;float f = 1.7320534f;sprintf( buffer, "%c",c);sprintf( buffer, "%d",i);sprintf( buffer, "%d",j);sprintf( buffer, "%f",f);
二、字符串转换为其它数据类型
strcpy(temp,"123");

短整型(int)
i = atoi(temp);
长整型(long)
l = atol(temp);
浮点(double)
d = atof(temp);
CString变量
CString name = temp;
BSTR变量
BSTR bstrValue = ::SysAllocString(L"程序员");
...///完成对bstrValue的使用
SysFreeString(bstrValue);

CComBSTR变量
CComBSTR类型变量可以直接赋值
CComBSTR bstrVar1("test");
CComBSTR bstrVar2(temp);

_bstr_t变量
_bstr_t类型的变量可以直接赋值
_bstr_t bstrVar1("test");
_bstr_t bstrVar2(temp);


三、其它数据类型转换到CString
使用CString的成员函数Format来转换,例如:


整数(int)
str.Format("%d",i);
浮点数(float)
str.Format("%f",i);
字符串指针(char *)等已经被CString构造函数支持的数据类型可以直接赋值
str = username;
对于Format所不支持的数据类型,可以通过上面所说的关于其它数据类型转化到char *的方法先转到char *,然后赋值给CString变量。

四、BSTR、_bstr_t与CComBSTR


CComBSTR 是ATL对BSTR的封装,_bstr_t是C++对BSTR的封装,BSTR是32位指针,但并不直接指向字串的缓冲区。
char *转换到BSTR可以这样:
BSTR b=_com_util::ConvertStringToBSTR("数据");///使用前需要加上comutil.h和comsupp.lib
SysFreeString(bstrValue);
反之可以使用
char *p=_com_util::ConvertBSTRToString(b);
delete p;
具体可以参考一,二段落里的具体说明。

CComBSTR与_bstr_t对大量的操作符进行了重载,可以直接进行=,!=,==等操作,所以使用非常方便。
特别是_bstr_t,建议大家使用它。

五、VARIANT 、_variant_t 与 COleVariant


VARIANT的结构可以参考头文件VC98\Include\OAIDL.H中关于结构体tagVARIANT的定义。
对于VARIANT变量的赋值:首先给vt成员赋值,指明数据类型,再对联合结构中相同数据类型的变量赋值,举个例子:
VARIANT va;
int a=2001;
va.vt=VT_I4;///指明整型数据
va.lVal=a; ///赋值

对于不马上赋值的VARIANT,最好先用Void VariantInit(VARIANTARG FAR* pvarg);进行初始化,其本质是将vt设置为VT_EMPTY,下表我们列举vt与常用数据的对应关系:

Byte bVal; // VT_UI1.
Short iVal; // VT_I2.
long lVal; // VT_I4.
float fltVal; // VT_R4.
double dblVal; // VT_R8.
VARIANT_BOOL boolVal; // VT_BOOL.
SCODE scode; // VT_ERROR.
CY cyVal; // VT_CY.
DATE date; // VT_DATE.
BSTR bstrVal; // VT_BSTR.
DECIMAL FAR* pdecVal // VT_BYREF|VT_DECIMAL.
IUnknown FAR* punkVal; // VT_UNKNOWN.
IDispatch FAR* pdispVal; // VT_DISPATCH.
SAFEARRAY FAR* parray; // VT_ARRAY|*.
Byte FAR* pbVal; // VT_BYREF|VT_UI1.
short FAR* piVal; // VT_BYREF|VT_I2.
long FAR* plVal; // VT_BYREF|VT_I4.
float FAR* pfltVal; // VT_BYREF|VT_R4.
double FAR* pdblVal; // VT_BYREF|VT_R8.
VARIANT_BOOL FAR* pboolVal; // VT_BYREF|VT_BOOL.
SCODE FAR* pscode; // VT_BYREF|VT_ERROR.
CY FAR* pcyVal; // VT_BYREF|VT_CY.
DATE FAR* pdate; // VT_BYREF|VT_DATE.
BSTR FAR* pbstrVal; // VT_BYREF|VT_BSTR.
IUnknown FAR* FAR* ppunkVal; // VT_BYREF|VT_UNKNOWN.
IDispatch FAR* FAR* ppdispVal; // VT_BYREF|VT_DISPATCH.
SAFEARRAY FAR* FAR* pparray; // VT_ARRAY|*.
VARIANT FAR* pvarVal; // VT_BYREF|VT_VARIANT.
void FAR* byref; // Generic ByRef.
char cVal; // VT_I1.
unsigned short uiVal; // VT_UI2.
unsigned long ulVal; // VT_UI4.
int intVal; // VT_INT.
unsigned int uintVal; // VT_UINT.
char FAR * pcVal; // VT_BYREF|VT_I1.
unsigned short FAR * puiVal; // VT_BYREF|VT_UI2.
unsigned long FAR * pulVal; // VT_BYREF|VT_UI4.
int FAR * pintVal; // VT_BYREF|VT_INT.
unsigned int FAR * puintVal; //VT_BYREF|VT_UINT.


_variant_t是VARIANT的封装类,其赋值可以使用强制类型转换,其构造函数会自动处理这些数据类型。
使用时需加上#include
例如:
long l=222;
ing i=100;
_variant_t lVal(l);
lVal = (long)i;


COleVariant的使用与_variant_t的方法基本一样,请参考如下例子:
COleVariant v3 = "字符串", v4 = (long)1999;
CString str =(BSTR)v3.pbstrVal;
long i = v4.lVal;


六、其它一些COM数据类型

根据ProgID得到CLSID
HRESULT CLSIDFromProgID( LPCOLESTR lpszProgID,LPCLSID pclsid);
CLSID clsid;
CLSIDFromProgID( L"MAPI.Folder",&clsid);

根据CLSID得到ProgID
WINOLEAPI ProgIDFromCLSID( REFCLSID clsid,LPOLESTR * lplpszProgID);
例如我们已经定义了 CLSID_IApplication,下面的代码得到ProgID
LPOLESTR pProgID = 0;
ProgIDFromCLSID( CLSID_IApplication,&pProgID);
...///可以使用pProgID
CoTaskMemFree(pProgID);//不要忘记释放

七、ANSI与Unicode
Unicode称为宽字符型字串,COM里使用的都是Unicode字符串。

将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);
将Unicode转换到ANSI
(1)使用WideCharToMultiByte,例如:
// 假设已经有了一个Unicode 串 wszSomeString...
char szANSIString [MAX_PATH];
WideCharToMultiByte ( CP_ACP, WC_COMPOSITECHECK, wszSomeString, -1, szANSIString, sizeof(szANSIString), NULL, NULL );
(2)使用W2A宏来实现,例如:
USES_CONVERSION;
pTemp=W2A(wszSomeString);
八、其它

对消息的处理中我们经常需要将WPARAM或LPARAM等32位数据(DWORD)分解成两个16位数据(WORD),例如:
LPARAM lParam;
WORD loVal

posted @ 2006-07-29 07:59 五指魅力 阅读(111) | 评论 (0)编辑 收藏

Ping命令,大家都比较熟悉,它常被用来测试局域网的连通状态。“Ping+IP地址”是大家最常用的一种命令格式,但大家是否注意过Ping命令中的IP地址呢?这里面可是有很多学问和讲究的,下面笔者就为大家介绍一下隐藏在Ping命令中的这些秘密。

  “.0”可以有条件省略

  大家常用“ping 127.0.0.1”命令在本机上做回路测试,用来验证本机的TCP/IP协议簇是否被正确安装。但你发现了吗?使用“ping 127.1”这个命令也能得到同样的测试结果(如图),其实“ping 127.1”和“ping 127.0.0.1”这两条命令是一样的,都是在进行回路测试。

  为什么会这样呢?这就是Ping命令应用中IP地址的使用技巧。大家都知道,IP地址由32位二进制数字组成,为了方便大家记忆,将每8位二进制数字换算成十进制数字,因此就形成了容易记忆的由四部分十进制数字组成的IP地址(如127.0.0.1)。由于,Windows操作系统具有自动填充“.0”的功能,因此我就可将“127.0.0.1”变为“127.1”。

  但是,这个“.0”的省略是有条件限制的,并不能任意省略。在Ping命令的应用中,只能将在IP地址的最后一部分十进制数字前出现的一个或多个“.0”省略,如把“ping 127.0.0.1”命令改写成“ping 127.1”。

  如果这一个或多个 “.0”没有紧挨着最后一部分的十进制数字,而是在其他位置,则这个“.0”不能省略,如“ping 202.0.96.1”就不能写成“ping 202.96.1”。这是因为“ping 202.96.1”返回的结果是“202.96.0.1”的应答信息,而不是“202.0.96.1”的应答信息。

  数字串代替IP地址

  在Ping命令中,还可以使用数字串代替IP地址,你相信吗?运行“ping 3658906394”命令,你会看到“218.22.123.26”这个IP地址的返回信息。

  为什么会这样呢?其实,“3658906394”就是IP地址“218.22.123.26”的另一种表示形式。当然,也可按同样的方法Ping其他的IP地址。

  字符串是如何转换而来的呢?其实并不复杂,以“218.22.123.26”这个IP地址为例,IP地址转换成数字串方法如下:先将“218.22.123.26”转换为十六进制“DA.16.7B.1A”,然后去掉小数点后,变为“DA167B1A”,最后将这个十六进制数转换为十进制“3658906394”,那么“218.22.123.26”就变为“3658906394”了。其他IP地址转换为数字串也是使用同样的方法。

  提示:在某些局域网环境中,使用“Ping+数字串”命令可能会失败,出现提示信息“Unknown host数字串”,这是因为该数字串被解析成主机名了,而不是IP地址。

  因此,掌握了上述技巧后,网管在进行网络测试或维护时,可以熟练运用“省略”方式,减轻Ping命令的字符输入量,提高工作效率。同时,使用数字串代替IP地址也可迷惑好奇心强的普通用户,以免他们胡乱设置。

2。利用注册表管理IP地址

在此告诉大家一个好办法:在自己的计算机上点击“开始→运行”,输入regedit命令运行注册表编辑器,然后在注册表菜单中选择“导出注册表文件”,在弹出的对话框中输入要保存的文件名,例如“lockip”,导出范围选择“选择的分支”,输入:“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Network”,接着点击保存,然后选定lockip文件,用右键点选“编辑”命令将它打开,可以看到所选分支下面有一行键名和键值“"NoNetSetup"=dword:00000000”,把键值00000000改为00000001。如果没有这一行,就在所选分支下一行加入“"NoNetSetup"=dword:00000001”就行了。

  然后在局域网内用户的计算机上,双击lockip文件把该文件中的内容加入注册表。如果谁再想改IP,那么对不起,计算机“网上邻居”属性已经被禁用。

  想恢复也简单,只要把lockip文件编辑一下,把00000001改成00000000再运行一下就行了。

3。知道对方IP入侵别人的电脑

黑客已经成为一种文化,很多人想成为黑客,他们偶尔学到了几种小花招,总喜欢拿别人开玩笑,搞些恶作剧。其实黑客的最高境界在于防守,不在于进攻。所谓明枪易躲暗箭难防,要防住他人所有的进攻,肯定需要懂得比对方更多的系统知识,了解更多的系统漏洞,及如何弥补漏洞。 现在满天都是黑客教程,但真正有用的不多,下面介绍一种WIN9X下的入侵方法: 1.取得对方IP地址如XX.XX.XX.XX,方法太多不细讲了。 2.判断对方上网的地点,开个DOS窗口键入 TRACERT XX.XX.XX.XX 第4和第5行反映的信息既是对方的上网地点。 3.得到对方电脑的名称,开个DOS窗口键入 NBTSTAT -A XX.XX.XX.XX 第一行是对方电脑名称 第二行是对方电脑所在工作组 第三行是对方电脑的说明 4.在Windows目录下有一文件名为LMHOSTS.SAM,将其改名为LMHOSTS,删除其内容,将对方的IP及电脑名按以下格式写入文件: XX.XX.XX.XX 电脑名 5.开DOS窗口键入 NBTSTAT -R 6.在开始-查找-电脑中输入对方电脑名,出现对方电脑点击即可进入。 以上方法请不要乱用,本人对你用上面的方法所惹出的麻烦概不负责,请慎重。 对付上面进攻的最好办法就是隐藏你的IP地址。
我的黑客网站
4。入侵Windows NT的原理

大致说来,黑客入侵Windows NT的原理和入侵Win95/98差不多, 因为NT同

样是使用NetBIOS Over TCP/IP ( NBT )的技术, 而且应用范围比Win95/98

更广泛。以下是几种黑客入侵Windows NT的方法, 让我们也窥探一下黑客的“

武器库”吧。
方法一、 使用空密码连线
  现在假设目标电脑的IP地址是202.64.161.X (X为任选数字), 先使用

nbtstat 指令查看对方NT的网络数据:
  nbtstat -A 202.64.161.X
  如果看到<20 的字样, 那么此NT系统可能将自己电脑数据共享出来。其实

在NT安装后, 会将电脑上的驱动器都共享出来, 没错, 是自动共享出来的!

不过只是隐藏了, 所以你未必会看得见。而很多人在安装好NT后未做任何设置便

即使用, 这正好给黑客一个入侵的大好机会。随后黑客就会使用Net View 指

令看看这个IP 地址:
  net view \\202.64.161.X
  正常来说会出现系统发生 System error 5 has occurred 的字样。这

就是NT比Win95/98 安全的地方! 如果是Win95/98 , 只要使用net view 指

令就可以看到对方电脑所有共享出来的资源, 如果是NT就一定要登录进入NT服务

器才可以用net view 指令。
但黑客并没有对NT服务器的帐户, 又怎样登录呢? 其实NT有一个很大的漏洞,

它有一个ipc$( Inter-Process Communication: 进程间通讯 ) , 其同样

是隐藏共享, 作为服务器与服务器间的沟通, 只要连接到对方的IPC, 便有机

会入侵了。他会先用null password ( 空密码, 即是没有密码! ) 来试试,

手法如下:
  net use \\202.64.161.X\ipc$ “ ” /use:“ ”
  以上的“ ” 是空密码的意思, 如果连接上会看见“指令执行成功”的字

样。接着便再用
  net view \\202.64.161.X
  然后便可以看到对方所有共享出来的资源了。
  接着黑客会用net use 指令, 把对方共享出来的资源映射成自己的网络驱

动器, 之后想怎样用就随心所欲了。如果对方没有把隐藏共享取消, 黑客可以

用以下指令:
  net use X: \\ip地址\c$
  那对方的C 盘便会变成自己的X 盘了, 不过这方法未必一定可行, 因为

NT服务器安装了Services Pack 3 或以上版本, 用空密码连接IPC$ 的权限

被限制, 不能够映射NT上的驱动器 , 这时便要使用下一个方法。
方法二、使用NAT工具
  如果用空密码进入NT服务器没有收获, 黑客们也不会绝望。黑客可以尝试使

用其他帐户的密码来进入。如何知道NT服务器的帐户? 那当然是猜啦! 其实NT

的密码不是想像中困难, 而是比想像中更易, 而这些大多是人为的错误。
  首先需要一个NAT的程序, NAT全名是( NetBIOS Auditing Tool ) ,

可以自动连线到NT服务器, 并猜对方帐户的密码, 这是Internet上黑客入侵NT

的必备“武器”。
  Essential NetTools 是一个专门检查NT漏洞的NAT 套餐, 它的功能非常

强劲, 先来看看它的几个主要功能。
  1. NB扫描
  NB扫描 可以一次性替你扫描 Internet 上电脑的IP, 如果你上网的速度

够快, 不用一分钟便可以扫描 整个Class C 的IP , 之后它会列出那一段

IP地址内所有电脑的NetBIOS数据, 作用和黑客用nbtstat指令一样, 不同的地

方就是不用逐一测试, 节省不少时间。
2. NATShell
  NATShell 是用暴力破解的方法尝试登录入NT服务器, 只要把目标的IP 地

址输入NATShell 的视窗, 便可以开始了。可能你以为“强攻”会很难, 但根

据经验, 有4成以上的NT都可以轻易攻入, 什么原因呢? 因为人懒之故。
  3.LMHosts
  用NB扫描到目标后, 可以选“Add all items to LMhosts ”项, 便

会将对方的IP 及电脑名称自动加在电脑的lmhosts文档内, 以后你可以用“查

找”→“电脑”, 找到对方的电脑, 非常方便。

posted @ 2006-07-29 07:57 五指魅力 阅读(137) | 评论 (0)编辑 收藏

五种windows密码设置及破解(一)
在使用电脑的过程中,难免要与各类密码打交道,以下九种密码可能是大家用的最多的:BIOS密码、安装密码、用户密码、电源管理密码、屏保密码、开机密码、上网密码、分级审查密码和共享密码。今天,我们就谈谈这些和我们息息相关的密码,本篇文章先讲九大常用密码的前五种密码。

  一、BIOS密码   

  BIOS(Basic Input Output System)即基本输入/输出系统,它实际上是被固化到计算机主板上的ROM芯片中的一组程序,为计算机提供最低级的、最直接的硬件控制。和其它程序不同的是,BIOS是储存在BIOS芯片中的,而不是储存在磁盘中,由于它属于主板的一部分,因此大家有时就称呼它一个既不同于软件也不同于硬件的名字“Firmware”(固件),它主要用于存放自诊断测试程序(POST程序)、系统自举装入程序、系统设置程序和主要I/O设备的I/O驱动程序及中断服务程序。

  如果你不希望别人用自己的电脑,可设置BIOS的密码功能给电脑加一把“锁”。遗忘BIOS密码该怎么办呢?不要着急,以下几招可以帮助你。

  根据用户设置的不同,开机密码一般分为两种不同情况,一种就是SetUP密码(采用此方式时,系统可直接启动,而仅仅只在进入BIOS设置时要求输入密码);另一种就是System密码(采用此方式时,无论是直接启动还是进行BIOS设置都要求输入密码,没有密码将一事无成)。对于用户设置的这两种密码,我们的破解方法是有所区别的:

  (一)破解SETUP密码

  如果计算机能正常引导,只是不能进入BIOS设置(即设置了SetUP密码),那么我们有以下几种办法供您选择:

  方法一:Dubug法

  在遗忘密码之后只需在DOS状态下启动Debug,然后输入如下命令即可手工清除密码:

  _ o 70 16

  _ o 71 16

  _ q

  另外,不熟悉Debug的用户也可下载一个专门破解CMOS密码的工具软件Cmospwd。然后在DOS启动该程序,它就会将用户的CMOS密码显示出来(Cmospwd支持Acer、AMI、AWARD、COMPAQ、DELL、IBM、PACKARD BELL、PHOENIX、ZENITH AMI等多种BIOS),使用非常方便。

  方法二:软件破解

  现在有很多检测系统或开机密码的软件,最常见的有BiosPwds、Cmospwd等。其中BiosPwds是其中比较优秀的一个,可以检测出BIOS版本、BIOS更新日期、管理员密码、CMOS密码、密码类型等,而且使用方法简单,单击窗口中的“获取密码”按钮即可显示出BiosPwds所检测到的所有信息。

  但是由于软件破解密码时,是对BIOS编码过的密码进行逆向解码,所以有时也许会发现程序的密码和真实的密码并不相同,这也属于正常现象,所以这一招有时会不灵的。

  方法三:自己编制文件破解

  进入MS-DOS环境,在DOS提示符号下输入EDIT并回车(若你发现按EDIT出现错误,就是说你没有edit.com这个文件,请看下一条方法),输入:

  ALT+179 ALT+55 ALT+136 ALT+216 ALT+230 ALT+112 ALT+176 ALT+32 ALT+230 ALT+113 ALT+254 ALT+195 ALT+128 ALT+251 ALT+64 ALT+117 ALT+241 ALT+195

  注:输入以上数据先按下ALT键,接着按下数字键盘里(按键盘上面那一排数字键是没有作用的)的数字键,输完一段数字后再松开ALT键,然后再按下ALT键。在操作过程中,屏幕上会出现一个乱字符,我们不用管它。然后在“file”菜单下选择“save”,保存为Cmos.com文件,接着退出到MS-DOS环境下,找到cmos.com这个文件,看看他是否是20个字节,若不是就说明你输入错了,须重新输入。确认后,直接运行cmos.com,屏幕上应该没有任何提示信息,然后重新启动计算机即可清除CMOS里的密码,当然,CMOS里的其它设置也会同时被清除,这就需要我们重新设置了。

  方法四:DOS下破解

  这个方法直接在MS-DOS环境下便可完成,在MS-DOS环境下输入:COPY CON CMOS.COM后回车,继续输入如下十个字符:ALT+176 ALT+17 ALT+230 p ALT+176 ALT+20 ALT+230 q ALT+205 <空格>,然后按“F6”键,再按回车保存,运行Cmos.com文件后,重新开机即可。

  (二)破解System密码

 若没有密码根本不能启动计算机(即设置了System密码),那我们就无法通过软件来解决密码遗忘的问题了。此时你可以采用以下几种办法:

  第一招:通用密码

  每个主板厂家都有主板设置的通用密码,以便于提供技术支持之用。如果我们知道了该主板的通用密码,那么无论是开

  机,还是进行CMOS设置都可以“穿墙而入”当然不要用这个去干坏事哟!

  需要注意的是各主板厂家出于某些原因,不同时期主板的通用密码会有所不同,因此这一招并不能通行天下,我们只有多尝试几次,是否有用就要看运气了!

  Award BIOS通用密码:j256、LKWPPETER、wantgirl、Ebbb、Syxz、aLLy、AWARD?SW、AWARD_SW、j262、HLT、SER、SKY_FOX、BIOSTAR、ALFAROME、lkwpeter、589721、awkard、h996、CONCAT、589589。

  AWI BIOS通用密码:AMI、BIOS、PASSWORD、HEWITT RAND、AMI_SW、LKWPETER、A.M.I。

  第二招:CMOS放电

  目前的主板大多数使用纽扣电池为BIOS提供电力,也就是说,如果没有电,它里面的信息就会丢失了。当它再次通上电时,BIOS就会回到未设置的原始状态,当然BIOS密码也就没有了。

  我们先要打开电脑机箱,找到主板上银白色的纽扣电池。小心将它取下,再把机箱尾部电源插头拔掉,用金属片短接电池底坐上的弹簧片,大概隔30秒后,再将电池装上。

  此时CMOS将因断电而失去内部储存的信息,OK!将它装回,合上机箱开机,系统就会提示“CMOS Checksum Error-DeFaults Loaded”,那就是提示你“CMOS在检查时发现了错误,已经载入了系统的默认值”BIOS密码破解成功。
五种windows密码设置及破解(二)
第三招:跳线短接

  如果主板的CMOS芯片与电池整合在了一块,或者是电池直接被焊死在了主板上,还有就是我们用了第二招“CMOS放电法”,结果没起作用,那么我们就要用跳线短接这一招了。

  打开机箱后,在主板CMOS电池附近会有一个跳线开关,在跳线旁边一般会注有RESET CMOS(重设CMOS)、CLEAN CMOS (清除CMOS)、CMOS CLOSE(CMOS关闭)或CMOS RAM RESET(CMOS内存重设)等字样,用跳线帽短接,然后将它跳回就行了!

  由于各个主板的跳线设置情况不太一样,所以在用这一招的时候,最好先查阅主板说明书。忘了说一件事,在CMOS放电或者清除CMOS中的数据时,不要在系统开机的情况下进行,建议断掉电脑电源。

   二、Windows的安装密码

  首先谈谈安装密码。安装密码即Windows CDKEY,是安装Windows时所必须的,输入完毕会记录在注册表中。点击“开始”菜单下的“运行”,输入regedit打开注册表编辑器,你会发现Windows的安装密码在注册表的如下位置:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\ProductId和HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\ProductKey,如果哪天忘记了Windows的安装密码到这里来看看就知道了。事实上,该密码并不重要,只是在重装Windows时有用处,安装后自动记录于此。如果你要重新安装Windows,又没有安装密码,不妨先到这里来看看并记录下来,以备后用。


  三、用户密码

  关于用户密码,很多人都存在一个误区,即认为用户密码就是开机密码。事实上Windows在默认的情况下,是没有开机密码的。那么用户密码是用来干什么的呢?是用来保护“个性”的!系统允许设置多个用户,其目的并不是为了保护用户的隐私。而是为每一个用户保存了一组系统外观的配置,以适应不同用户不同的使用习惯,就像目前流行的“皮肤”一样,只不过要输入密码而已。所以这个密码根本起不到保密的作用,只是个摆设罢了。

  用户密码可以在控制面板的“密码”或“用户”工具中设置:在控制面板中,双击“用户”图标,点击“新建”按钮,会出现“添加用户”窗口,点击“下一步”按钮,输入新添加的用户名,然后再点击“下一步”,在出现的窗口中输入新用户密码,接着点击“下一步”按钮,会出现“个性化设置”窗口,选择你需要的项目(不选也可以),然后再次点击“下一步”按钮,就可以为本机添加一个新用户。用同样的方法给每个可以使用此机器的用户建立一个用户名,然后你就可以输入密码了,当然也可以留到用户登录后自己修改密码。

  对Windows有点了解的人都知道在Windows 9X系统中,这个密码系统是毫无安全性可言的。它在开机或更换用户登陆时启动,输入正确的密码后就可以使用系统,但是即使不知道密码也可以用ESC键跳过登陆程序,直接进入系统。这时我们可以通过更改注册表,来强制用户在开机时必须要输入用户名和密码才能进入Windows。实现方法:点击“开始”菜单中的“运行”,输入regedit,打开注册表编辑器,依次打开到HKEY_LOCAL_MACHINE\Network\Logon,然后新建一个DWORD值,将其命名为“Mustbevalidated”,值改为1,就可以了。

  和Windows 9X不同,Windows 2000在这一方面作了很大的改进,如果把系统设定为:用户必须输入用户名和密码才能使用本机,那么如果不输入正确的用

posted @ 2006-07-29 07:56 五指魅力 阅读(151) | 评论 (0)编辑 收藏

对于大多数应用来说,共享池的大小对于Oracle 性能来说都是很重要的。共享池中保存数据字典高速缓冲
和完全解析或编译的的PL/SQL 块和SQL 语句。

当我们在共享池中试图分配大片的连续内存失败的时候,Oracle首先刷新池中当前没使用的所有对象,使空
闲内存块合并。如果仍然没有足够大单个的大块内存满足请求,就会产生ORA-04031 错误。

当这个错误出现的时候你得到的错误信息如下:

Error : ORA 4031
Text : unable to allocate %s bytes of shared memory (%s,%s,%s)
----------------------------------------------------------------------------------------------------------------
Cause : More shared memory is needed than was allocated in the shared pool.
Action : Either use the dbms_shared_pool package to pin large packages, reduce your use of
shared memory, or increase the amount of available shared memory by increasing the value of
the init.ora parameter "shared_pool_size".

1.共享池相关的实例参数

在继续之前,理解下面的实例参数是很重要的:

  • SHARED_POOL_SIZE – 这个参数指定了共享池的大小,单位是字节。可以接受数字值或者数
    字后面跟上后缀"K" 或 "M" 。"K"代表千字节, "M"代表兆字节。
  • SHARED_POOL_RESERVED_SIZE – 指定了为共享池内存保留的用于大的连续请求的共享池
    空间。当共享池碎片强制使Oracle 查找并释放大块未使用的池来满足当前的请求的时候,这个参
    数和SHARED_POOL_RESERVED_MIN_ALLOC 参数一起可以用来避免性能下降。

    这个参数理想的值应该大到足以满足任何对保留列表中内存的请求扫描而无需从共享池中刷新对
    象。既然操作系统内存可以限制共享池的大小,一般来说,你应该设定这个参数为
    SHARED_POOL_SIZE 参数的 10% 大小。
  • SHARED_POOL_RESERVED_MIN_ALLOC –这个参数的值控制保留内存的分配。如果一个足
    够尺寸的大块内存在共享池空闲列表中没能找到,内存就从保留列表中分配一块比这个值大的空
    间。默认的值对于大多数系统来说都足够了。如果你加大这个值,那么Oracle 服务器将允许从这
    个保留列表中更少的分配并且将从共享池列表中请求更多的内存。这个参数在Oracle 8i 是隐藏
    的。

2.诊断ORA-04031 错误

ORA-04031 错误通常是因为库高速缓冲中或共享池保留空间中的碎片。 在加大共享池大小的时 候考虑调整应用
使用共享的SQL 并且调整如下的参数:

SHARED_POOL_SIZE,
SHARED_POOL_RESERVED_SIZE,
SHARED_POOL_RESERVED_MIN_ALLOC.

首先判定是否ORA-04031 错误是由共享池保留空间中的库高速缓冲的碎片产生的。提交下的查 询:

SELECT free_space, avg_free_size, used_space, avg_used_size,
request_failures, last_failure_size
FROM v$shared_pool_reserved;

如果:

REQUEST_FAILURES > 0 并且
LAST_FAILURE_SIZE > SHARED_POOL_RESERVED_MIN_ALLOC

那么ORA-04031 错误就是因为共享池保留空间缺少连续空间所致。
要解决这个问题,可以考虑加大SHARED_POOL_RESERVED_MIN_ALLOC 来降低缓冲进共 享池保留空间的对
象数目,并增大 SHARED_POOL_RESERVED_SIZE 和SHARED_POOL_SIZE 来加大共享池保留空间的可用
内存。

如果:
REQUEST_FAILURES > 0 并且
LAST_FAILURE_SIZE < SHARED_POOL_RESERVED_MIN_ALLOC

或者

REQUEST_FAILURES 等于0 并且
LAST_FAILURE_SIZE < SHARED_POOL_RESERVED_MIN_ALLOC

那么是因为在库高速缓冲缺少连续空间导致ORA-04031 错误。

第一步应该考虑降低SHARED_POOL_RESERVED_MIN_ALLOC 以放入更多的对象到共享池
保留空间中并且加大SHARED_POOL_SIZE。


3.解决ORA-04031 错误

? ORACLE BUG
要解决这个错误(如果可以称得上错误的话),进行的诊断的第一步是在你的平台上使用最新的补丁集。
大多数的ORA-04031错误都和BUG 相关,可以通过使用这些补丁来避免。

下面表中总结和和这个错误相关的最常见的BUG,可能的环境和修补这个问题的补丁。

BUG 描述 Workaround Fixed
<Bug:1397603> ORA-4031/SGA memory leak of PERMANENT memory occurs for buffer handles _db_handles_cached = 0 901/ 8172
<Bug:1640583> ORA-4031 due to leak / cache buffer chain contention from AND-EQUAL access Not available 8171/901
<Bug:1318267> INSERT AS SELECT statements may
not be shared when they should be
if TIMED_STATISTICS. It can lead to ORA-4031

_SQLEXEC_PROGRESSION_COST=0

8171/8200
<Bug:1193003> Cursors may not be shared in 8.1
when they should be
Not available 8162/8170/ 901

共享池结构中的一些BUG 会引起这个错误,不过通常大量的共享的SQL/PLSQL 语句也会引起
这个错误。一旦打过了最新的补丁,在遇到这个问题的时候我们强烈推荐调整数据库和应用。

要得到已知的BUG 的完整信息,可以参考:

<Note:62143.1>: Main issues affecting the Shared Pool on Oracle 7 , Oracle8 and Oracle8i。

? 共享池碎片
每一次,需要被执行的SQL 或者PL/SQL 语句的解析形式载入共享池中都需要一块特定的连续
的空间。数据库要扫描的第一个资源就是共享池中的空闲可用内存。一旦空闲内存耗尽,数据库
要查找一块已经分配但还没使用的内存准备重用。如果这样的确切尺寸的大块内存不可用,就继
续按照如下标准寻找:

◇ 大块(chunk)大小比请求的大小大
◇ 空间是连续的
◇ 大块内存是可用的(而不是正在使用的)

这样大块的内存被分开,剩余的添加到相应的空闲空间列表中。当数据库以这种方式操作一段时
间之后,共享池结构就会出现碎片。

当共享池存在碎片的问题,分配一片空闲的空间就会花费更多的时间,数据库性能也会下降(整个操
作的过程中,"chunk allocation"被一个叫做"shared pool latch" 的闩所控制) 或者是出现
ORA-04031 错误errors (在数据库不能找到一个连续的空闲内存块的时候)。

-------------------------------------------------------------------------------------
参考 <Note:61623.1>: 可以得到关于共享池碎片的详细讨论。
-------------------------------------------------------------------------------------

如果SHARED_POOL_SIZE 足够大,大多数的 ORA-04031 错误都是由共享池中的动态SQL
碎片导致的。可能的原因如下:

◇非共享的SQL
◇生成不必要的解析调用 (软解析)
◇没有使用绑定变量

要减少碎片的产生你需要确定是前面描叙的几种可能的因素。可以采取如下的一些方法,当然不
只局限于这几种: 应用调整、数据库调整或者实例参数调整。

--------------------------------------------------------------------------------------
请参考 <Note:62143.1>,描述了所有的这些细节内容。这个注释还包括了共享池如何工作的细节。
--------------------------------------------------------------------------------------

下面的视图有助于你标明共享池中非共享的SQL/PLSQL:

V$SQLAREA 视图

这个视图保存了在数据库中执行的SQL 语句和PL/SQL 块的信息。下面的SQL 语句可以
显示给你带有literal 的语句或者是带有绑定变量的语句:

SELECT substr(sql_text,1,40) "SQL", count(*) , sum(executions) "TotExecs"
FROM v$sqlarea
WHERE executions < 5
GROUP BY substr(sql_text,1,40)
HAVING count(*) > 30
ORDER BY 2;

注意: 语句Having 中的 "30"数值可以根据需要调整以得到更为详细的信息。

X$KSMLRU 视图

有一个固定表x$ksmlru 跟踪共享池中导致其它对象换出(age out)的应用。这个固定表可
以用来标记是什么导致了大的应用。

如果很多对象在共享池中都被阶段性的刷新可能导致响应时间问题并且有可能在对象重载
入共享池中的时候导致库高速缓冲闩竞争问题。

关于这个x$ksmlru 表的一个不寻常的地方就是如果有人从表中选取内容这个表的内容就
会被擦除。这样这个固定表只存储曾经发生的最大的分配。这个值在选择后被重新设定这
样接下来的大的分配可以被标记,即使它们不如先前的分配过的大。因为这样的重置,在
查询提交后的结果不可以再次得到,从表中的输出的结果应该小心的保存。
监视这个固定表运行如下操作:

SELECT * FROM X$KSMLRU WHERE ksmlrsiz > 0;

在Oracle8i 中这个表不能被SYS用户之外的用户所选取。

? 小的共享池尺寸

最后,一个小的共享池可以导致ORA-04031 错误, 不过在碎片真正的是个问题的时候增大
共享池的大小的时候要小心。在错误发现的时候通常有延迟现象,不过当在大的共享池的
碎片中找到一片空闲的内存会加大对性能的影响。

下面的信息将有助于你调整共享池的大小:

库高速缓冲命中率
命中率有助于你衡量共享池的使用,基于多少次SQL/PLSQL 需要被解析而不是
重用。下面的SQL 语句有助于你计算库高速缓冲的命中率:

SELECT SUM(PINS) "EXECUTIONS",
SUM(RELOADS) "CACHE MISSES WHILE EXECUTING"
FROM V$LIBRARYCACHE;

如果misses 比上executions 大于1%, 那就应该尝试着通过加大共享池来减少库高速缓冲
的丢失。

Shared Pool Size Calculation

要计算最适合当前工作负荷的共享池大小,参考:

<Note:1012046.6>: HOW TO CALCULATE YOUR SHARED POOL SIZE.

4.对ORA-04031 的高级分析

如果使用如上的解决办法,这个错误仍然出现,在initSID.ora 文件中设定如下的事件并重新启
动实例:

event = "4031 trace name errorstack level 3"

会在下一次错误发生的时候产生一个跟踪文件。 这个跟踪文件可以提供给Oracle 支持人员来解决问题。

相关文档

<Note:151790.1> : Oracle8 Tuning Documentation Guide
<Note:62143.1> : Understanding and Tuning the Shared Pool in Oracle7, Oracle8, and Oracle8i.
<Note:1012046.6>: HOW TO CALCULATE YOUR SHARED POOL SIZE
<Note:1012049.6>: TUNING LIBRARY CACHE LATCH CONTENTION
<Note:61623.1> : Resolving Shared Pool Fragmentation In Oracle7
<Note: 146599.1>: 就是这篇文档的英文原稿.

所有Note字样的文档可以从 Metalink.oracle.com 上找到。需要Oracle的CSI帐号。

About
这篇文章的翻译是本着学习交流的目的。当然,原英文作者保留版权。如果对译文上的技术细节不是
很满意,可以参考原英文文档。有其它问题请通过Fenng@itpub.net 和我联系。


原文出处:
<a href="http://www.dbanotes.net/Oracle/Ora-04031.htm">http://www.dbanotes.net/Oracle/Ora-04031.htm</a>

posted @ 2006-07-28 18:38 五指魅力 阅读(237) | 评论 (0)编辑 收藏

     摘要: 本页内容 ...  阅读全文

posted @ 2006-07-28 13:51 五指魅力 阅读(2554) | 评论 (0)编辑 收藏

     摘要: 摘要:本文 ASP.NET 应用程序身份验证的概念,介绍了各种身份验证模式并进行了比较,阐述了选择身份验证模式的机制,并给出了一种基于窗体身份验证模式的实现方法。 关键字:身份验证 authentication ASP.NET W...  阅读全文

posted @ 2006-07-28 13:47 五指魅力 阅读(216) | 评论 (0)编辑 收藏

     摘要: 托管是 .NET 的一个很基础的概念,所有的 .NET 应用程序代码要完全发挥作用需要进入托管的环境( CLR --Common Language Runtime ),而这个环境实际上就是称作宿主 (Host) 为将要启动的 .NET 代码准备的。目前来讲 windows 系统上...  阅读全文

posted @ 2006-07-28 13:41 五指魅力 阅读(191) | 评论 (0)编辑 收藏

仅列出标题
共7页: 1 2 3 4 5 6 7