Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Блин кто может? 11.08.03 12:41
Автор: Darkhelmet Статус: Незарегистрированный пользователь
|
Кто в силах переписать вот этот исходник с Си на Delphi?
Он и вам полезен буде!!! =)
Я Си нифига не знаю... =(
#include <windows.h>
#include <Ntsecapi.h>
#include <stdio.h>
void hexprint(char *buf, int size)
{
for (int i=0;i<size;i+=16)
{
int j=0;
while((i+j<size)&&(j<16))
{
int z=(unsigned char)buf[i+j];
printf("%02X ",z);
j++;
if (j==8) printf(" ");
}
for (j=j;j<18;j++) printf(" ");
j=0;
while((i+j<size)&&(j<16))
{
if ((unsigned char)buf[i+j]>=' ') printf("%c",buf[i+j]); else
printf(".");
j++;
if (j==8) printf(" ");
}
printf("\n");
}
printf("\n");
}
extern "C" __declspec(dllimport) VOID __stdcall
RtlInitUnicodeString(
PUNICODE_STRING DestinationString,
PCWSTR SourceString
);
extern "C" __declspec(dllimport) VOID __stdcall
RtlConvertSidToUnicodeString(
PUNICODE_STRING usSID,
SID *sid,
DWORD unkown);
#define TARGET_SYSTEM_NAME L"mysystem"
LSA_HANDLE GetPolicyHandle()
{
LSA_OBJECT_ATTRIBUTES ObjectAttributes;
WCHAR SystemName[] = TARGET_SYSTEM_NAME;
LSA_UNICODE_STRING lusSystemName;
NTSTATUS ntsResult;
LSA_HANDLE lsahPolicyHandle;
ZeroMemory(&ObjectAttributes, sizeof(ObjectAttributes));
/*SystemNameLength = 0;//wcslen(SystemName);
lusSystemName.Buffer = NULL;//SystemName;
lusSystemName.Length = SystemNameLength * sizeof(WCHAR);
lusSystemName.MaximumLength= (SystemNameLength+1) * sizeof(WCHAR);*/
RtlInitUnicodeString(&lusSystemName,NULL/*TARGET_SYSTEM_ NAME*/);
ntsResult = LsaOpenPolicy(
&lusSystemName, //Name of the target system.
&ObjectAttributes,
POLICY_ALL_ACCESS, //Desired access permissions.
&lsahPolicyHandle //Receives the policy handle.
);
if (ntsResult)
{
wprintf(L"OpenPolicy returned %lu\n",
LsaNtStatusToWinError(ntsResult));
return NULL;
}
return lsahPolicyHandle;
}
int main(int argc, char* argv[])
{
char *lpSystemName = NULL;
LSA_HANDLE hPolicy = GetPolicyHandle();
LSA_UNICODE_STRING *Data;
LSA_UNICODE_STRING KeyName;
WCHAR Template[]=L"RasDialParams!%s#%d";
char AccountName[1024];
DWORD sAccountName=sizeof(AccountName);
GetUserName(AccountName,&sAccountName);
union {
SID s;
char c[1024];
} sid;
DWORD ssid = sizeof(sid);
char DomainName[1024];
DWORD sDomainName = sizeof(DomainName);
SID_NAME_USE peUse;
if
(!LookupAccountName(lpSystemName,AccountName,(SID*)&sid. c,&ssid,(char*)&DomainName,&sDomainName,&peU se))
printf("LookupAccountName error %d\n",GetLastError());
WCHAR wcSIDbuf[100];
UNICODE_STRING wcSID = {sizeof(wcSIDbuf),sizeof(wcSIDbuf),wcSIDbuf};
RtlConvertSidToUnicodeString(&wcSID,&sid.s,0);
wprintf(L"%s\n",wcSIDbuf);
WCHAR KeyNameW[1024];
swprintf(KeyNameW,Template,wcSIDbuf,0);
wprintf(L"%s\n",KeyNameW);
RtlInitUnicodeString(&KeyName,KeyNameW);
LsaRetrievePrivateData(hPolicy,&KeyName,&Data);
if (Data) //wprintf(L"%s\n",Data->Buffer);
hexprint((char*)Data->Buffer,Data->Length);
return 0;
}
|
|
|