历遍密码CACHE

作者:陆麟
转载请征得作者同意.
2000.6.11



WIN9X的MPR.DLL仍然提供了历遍密码CACHE的功能.该功能的函数为WNetEnumCachedPasswords.
我们历遍WIN32SDK所有头文件.里面没有任何原型和解说.在MSDN的不知名角落,保留了一句话,PASSWORD CACHE SERVICE提供了让NP和应用程序一个权利来决定是否将密码永久存取.然后,只有有关WFW的的一小篇文章提及该函数.但是,仍然没有原型和说明.
而WFW的函数原型则和9X的不同,如果使用原来WFW SDK的原型,则必死机无疑.经过半天整理得到的结果如下.:DDD
以前如果编译器调用约定和系统相符,我就不在函数定义前加函数调用约定说明.但是很多朋友老是发MAIL问我调用约定,为避免麻烦,这次把函数调用约定写入原型里.大家简化了吧.:)

typedef struct tagPASSWORD_CACHE_ENTRY {
    WORD cbEntry; // size of this entry, in bytes
    WORD cbResource; // size of resource name, in bytes
    WORD cbPassword; // size of password, in bytes
    BYTE iEntry; // entry index
    BYTE nType; // type of entry
    BYTE abResource[1]; // start of resource name
 // password immediately follows resource name
} PASSWORD_CACHE_ENTRY;

typedef BOOL (__stdcall *CACHECALLBACK)(PASSWORD_CACHE_ENTRY *pce);
typedef WORD (__stdcall *PWNetEnumCachedPasswords)(
    LPSTR pbPrefix, //Indicate the resource name the enumerated password function is for.
    DWORD cbPrefix, //strlen of pbPrefix
    DWORD nType, // resource type, 0xff for all type
    CACHECALLBACK pfnCallback, //Callback when a PASSWORD_CACHE_ENTRY had been built.
    DWORD UNKNOWN /*Parameter for NP usage??? Usually set to NULL*/ );