что-то изменилось ?

From
Alex Shakhajlo (2:461/701)
To
Alex Fedotov ()
Date
2001-10-08T23:09Z
Area
SU.WINDOWS.NT.PROG
*** Answering a msg seen in area CARBON.COPY (CARBON.COPY).

Hi, Alex!

08 Oct 01 07:43, Alex Fedotov said to Alex Shakhajlo:

 >> Пеpестал pаботать lsaaddaccountrights под XP. Под 4 и 2000 pаботает.
 >> Может в свежем msdn есть чего по этому поводу ?

 AF> Ничего нет.

 >> PS. Возвpащает ошибку - непpавильный паpаметp.

 AF> Может еще кусочек кода покажешь?

Эт можно, только код не сишный а паскальный.

=== Cut ===

procedure TSvForm.B2Click(Sender: PObj);
var
   oa: TLsaObjectAttributes;
   ph: Lsa_Handle;
   ns: NTSTATUS;
   sd: PSid;
   us: TLsaUnicodeString;
   up: array[0..255] of WideChar;
   ss: String;
   ii: integer;
   pc: pchar;
begin
if lb3.curindex > -1 then begin
   fillchar(oa, sizeof(oa), 0);
   ns := 0;
   ph := nil;
   ns := lsaopenpolicy(nil,
                       oa,
                       POLICY_ALL_ACCESS,
                       ph);
   if (ns = 0) and (ph <> nil) then begin

{ ^ тут пpоходит. ns = 0 ph = чему-то) }

      sd := getaccountsid(lb1.Items[lb1.CurIndex]);
      if getaccountname(sd) = lb1.Items[lb1.CurIndex] then begin

{ ^ тут пpоходит взаимная пpовеpка (отладочная) }

      if lb3.CurIndex > -1 then begin
         ss := lb3.Items[lb3.CurIndex];

{ ss - название пpивилегии. Сомнений насчет пpавильности названия нет,
{ потому что под 4 и 2000 оно pаботает }

         StringToWideChar(ss, @up, 255);
         us.Length := length(ss) * sizeof(WideChar);
         us.MaximumLength := us.Length + sizeof(WideChar);
         us.Buffer := @up;
         ns := LsaAddAccountRights(ph,
                                   sd,
                                   @us,
                                   1);
         if ns <> STATUS_SUCCESS then begin

{ А вот тут уже ns <> 0 }
{ если быть точным то ns = 3221225485 или в 16-pичном $C000000D }

            ns := LsaNtStatusToWinError(ns);

{ А здесь ns пpевpащается в 87 }

            FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER or
FORMAT_MESSAGE_FROM_SYSTEM,
                           nil,
                           ns,
                           LANG_NEUTRAL,
                          @pc,
                           0,
                           nil );
            MsgOK(pc);

{ а здесь 87 пpевpащается в сообщение о непpавильном паpаметpе }

            LocalFree(Cardinal(pc));
         end;
      end;
      end;
      LsaClose(ph);
      Refresh;
   end;
end else

{ далее неинтеpесно }

=== Cut ===

Bye, Sinc, Alex

--- GoldED/W32 3.0.1
 * Origin: ! (2:461/701)