回复 9楼 吹水佬
stt就是那个结构体的指针
DECLARE long CredWriteA IN advapi32 as apiCredWrite string@,long DECLARE long CredReadA IN advapi32 as apiCredRead string@,long,long,long@ DECLARE long CredFree IN advapi32 as apiCredFree long DECLARE long _strdup IN msvcrt as apiStrdup string DECLARE long free IN msvcrt as apiFree long DECLARE long strlen IN msvcrt as apiStrlen long #define CRED_TYPE_GENERIC 1 #define CRED_TYPE_DOMAIN_PASSWORD 2 #define CRED_TYPE_DOMAIN_CERTIFICATE 3 #define CRED_TYPE_DOMAIN_VISIBLE_PASSWORD 4 #define CRED_TYPE_MAXIMUM 5 #define CRED_TYPE_MAXIMUM_EX (CRED_TYPE_MAXIMUM+1000) #define CRED_PERSIST_NONE 0 #define CRED_PERSIST_SESSION 1 #define CRED_PERSIST_LOCAL_MACHINE 2 #define CRED_PERSIST_ENTERPRISE 3 ? SaveCred("myTarget", "张三", "abc123") ? ReadCred("myTarget") FUNCTION SaveCred(cTargetName, cUserName, cPassword) pTargetName = apiStrdup(cTargetName) pUserName = apiStrdup(cUserName) pPassword = apiStrdup(cPassword) ** CREDENTIALA 结构 cred = 0h00000000; + BINTOC(CRED_TYPE_GENERIC, "4RS"); && Type + BINTOC(pTargetName, "4RS"); && TargetName + REPLICATE(0h00, 12); + BINTOC(apiStrlen(pPassword), "4RS"); && CredentialBlobSize + BINTOC(pPassword, "4RS"); && CredentialBlob + BINTOC(CRED_PERSIST_LOCAL_MACHINE, "4RS"); && Persist + REPLICATE(0h00, 12); + BINTOC(pUserName, "4RS") && UserName ret = apiCredWrite(@cred, 0) apiFree(pTargetName) apiFree(pUserName) apiFree(pPassword) RETURN ret != 0 ENDFUNC FUNCTION ReadCred(cTargetName) pCred = 0 IF apiCredRead(@cTargetName, CRED_TYPE_GENERIC, 0, @pCred) == 0 RETURN .F. ENDIF p = CTOBIN(SYS(2600,pCred+8,4),"4RS") ? "凭据名称:", SYS(2600, p, apiStrlen(p)) p = CTOBIN(SYS(2600,pCred+48,4),"4RS") ? "用户名称:", SYS(2600, p, apiStrlen(p)) p = CTOBIN(SYS(2600,pCred+28,4),"4RS") ? "用户密码:", SYS(2600, p, apiStrlen(p)) ? apiCredFree(pCred) RETURN .T. ENDFUNC