首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

求好心人帮忙把看看上面代码转换成delphi

2012-12-15 
求好心人帮忙把看看下面代码转换成delphi.语言不通,障碍啊。int WINAPI WlxLoggedOutSAS (PVOID pWlxContex

求好心人帮忙把看看下面代码转换成delphi.
语言不通,障碍啊。

int WINAPI WlxLoggedOutSAS (
  PVOID pWlxContext,
  DWORD dwSasType,
  PLUID pAuthenticationId,
  PSID pLogonSid,
  PDWORD pdwOptions,
  PHANDLE phToken,
  PWLX_MPR_NOTIFY_INFO pMprNotifyInfo,
  PVOID * pProfile)
{
    if(MY_SAS_TYPE!=dwSasType)
        return WLX_SAS_ACTION_NONE;

    PGINA_CONTEXT pgContext = (PGINA_CONTEXT) pWlxContext;
      int ret = pgContext->pWlxFuncs->WlxDialogBox(pgContext->hWlx,
                                pgContext->hDllInstance,
                                (LPWSTR)MAKEINTRESOURCE(IDD_INSERT_CARD_NOTICE_DIALOG),
                                NULL,
                                DisplaySASNoticeDlgProc
                                );
    
    if(ret==IDCANCEL)
    {
        return WLX_SAS_ACTION_SHUTDOWN;
    }

    if (ret != IDC_LOGON_BUTTON) 
    {
        return WLX_SAS_ACTION_NONE;
    }

    TOKEN_STATISTICS userStats;
    TOKEN_GROUPS * pGroups;
    DWORD cbStats;

    if (!phToken)
        return WLX_SAS_ACTION_NONE;
 
    while(1)
    {

        if (!LogonUser(g_lpUserName,
                g_lpDomain, 
                    g_lpPassword,
                    LOGON32_LOGON_INTERACTIVE,
                    LOGON32_PROVIDER_DEFAULT,
                    phToken))
        { 
            //Logon failed. Give user a chance to update his disk


            ret = pgContext->pWlxFuncs->WlxDialogBox(pgContext->hWlx,
                    pgContext->hDllInstance,


                    (LPWSTR)MAKEINTRESOURCE(IDD_WIN_LOGON_DIALOG),
                    NULL,
                    UpdateWindowsUserDlgProc
                    );

            if (ret != IDOK) 
            {
                return WLX_SAS_ACTION_NONE;
            }
        }
          else
            break;
    } 

    pgContext->hUserToken=*phToken;

    // Pass back null profile and options.


    *pdwOptions = 0;
    *pProfile =NULL; 
 
    // Get the authenticationid from the user token.


    if (!GetTokenInformation(*phToken,
                   TokenStatistics,
                (PVOID) &userStats,
                sizeof(TOKEN_STATISTICS),
                &cbStats)
    )
    {
        return WLX_SAS_ACTION_NONE;
    }
    else
    {
        *pAuthenticationId = userStats.AuthenticationId; 
    }

    DWORD size,i;
    pGroups = (TOKEN_GROUPS *)LocalAlloc(LMEM_FIXED, 1024);
        
    GetTokenInformation(*phToken,
        TokenGroups,
                pGroups,
                1024,
                &size);
        if (size > 1024)
           {
            pGroups = (TOKEN_GROUPS *)LocalReAlloc(pGroups, LMEM_FIXED, size);
            GetTokenInformation(*phToken,
                         TokenGroups,
                             pGroups,


                             size,
                             &size);
           }

        for (i = 0; i < pGroups->GroupCount ; i++)
           {
               if ((pGroups->Groups[i].Attributes & SE_GROUP_LOGON_ID) == 
                                                                SE_GROUP_LOGON_ID)
            {
                  CopySid(GetLengthSid(pLogonSid),
                           pLogonSid,
                           pGroups->Groups[i].Sid );
            break;
            }
    }

        LocalFree(pGroups);
    pMprNotifyInfo->pszUserName=DupMbToWsString(g_lpUserName);
    pMprNotifyInfo->pszDomain=DupMbToWsString(g_lpDomain);
    pMprNotifyInfo->pszPassword=DupMbToWsString(g_lpPassword);
    pMprNotifyInfo->pszOldPassword = NULL;
    return WLX_SAS_ACTION_LOGON;
}
 

 

[最优解释]
function WlxLoggedOutSAS (
      pWlxContext: Pointer;
      dwSasType: DWORD ;
      pAuthenticationId: PLUID ;
      pLogonSid: PSID ;
      pdwOptions: PDWORD ;
      phToken: PHANDLE ;
      pMprNotifyInfo: PWLX_MPR_NOTIFY_INFO ;
  var pProfile: Pointer ): Integer; stdcall;
var
  pgContext: PGINA_CONTEXT;
  ret: Integer;
  userStats: KEN_STATISTICS ;
  pGroups: PLTOKEN_GROUPS;
  cbStats: DWORD ;
  size,i: DWORD;
begin
  if(MY_SAS_TYPE<>dwSasType) then begin
    Result := WLX_SAS_ACTION_NONE;
    Exit;
  end;

  pgContext := PGINA_CONTEXT( pWlxContext);
  ret := pgContext^.pWlxFuncs^.WlxDialogBox(pgContext^.hWlx,
    pgContext^.hDllInstance,
    //(LPWSTR)MAKEINTRESOURCE(IDD_INSERT_CARD_NOTICE_DIALOG),


    PWideChar(WideString(CONST_INSERT_CARD_NOTICE_DIALOG)), //字符串资源
    Nil,
    DisplaySASNoticeDlgProc
    );

  if(ret=IDCANCEL) then begin
    result := WLX_SAS_ACTION_SHUTDOWN;
    Exit;
  end;

  if (ret <> IDC_LOGON_BUTTON) then begin
    result :=WLX_SAS_ACTION_NONE;
    Exit;
  end;



  if (phToken = Nil) then begin
    result := WLX_SAS_ACTION_NONE;
    exit;
  end;

  while(true) do begin

    if (not LogonUser(g_lpUserName,
      g_lpDomain,
      g_lpPassword,
      LOGON32_LOGON_INTERACTIVE,
      LOGON32_PROVIDER_DEFAULT,
      phToken)) then begin
      //Logon failed. Give user a chance to update his disk


      ret := pgContext^.pWlxFuncs^.WlxDialogBox(pgContext^.hWlx,
        pgContext^.hDllInstance,
        //(LPWSTR)MAKEINTRESOURCE(IDD_WIN_LOGON_DIALOG),
        PWideChar(WideString(CONST_WIN_LOGON_DIALOG)), //字符串资源
        Nil,
        UpdateWindowsUserDlgProc
        );

      if (ret <> IDOK) then begin
        result := WLX_SAS_ACTION_NONE;
        exit;
      end;
    end else begin
      break;
    end;
  end;

  pgContext^.hUserToken := phToken^;

  // Pass back null profile and options.


  pdwOptions^ := 0;
  pProfile := NIL;
 
  // Get the authenticationid from the user token.


  if (NOt GetTokenInformation(phToken^,
    TokenStatistics,
    Pointer( @userStats),
    sizeof(TOKEN_STATISTICS),
    @cbStats)
    ) then begin
    result := WLX_SAS_ACTION_NONE;
    exit;
  end else begin
    pAuthenticationId^ := userStats.AuthenticationId;
  end;


  pGroups := PTOKEN_GROUPS (LocalAlloc(LMEM_FIXED, 1024));
     
  GetTokenInformation(phToken^,
    TokenGroups,
    pGroups,
    1024,
    @size);
  if (size > 1024) then begin
    pGroups := PTOKEN_GROUPS (LocalReAlloc(pGroups, LMEM_FIXED, size));
      GetTokenInformation(phToken^,


      TokenGroups,
      pGroups,
      size,
      @size);
  end;

  for i := 0 to pGroups^.GroupCount-1 do begin
    if ((pGroups^.Groups[i].Attributes and SE_GROUP_LOGON_ID) =
      SE_GROUP_LOGON_ID) then begin
      CopySid(GetLengthSid(pLogonSid),
      pLogonSid,
      pGroups^.Groups[i].Sid );
      break;
    end;
  end;

  LocalFree(pGroups);
  pMprNotifyInfo^.pszUserName:=DupMbToWsString(g_lpUserName);
  pMprNotifyInfo^.pszDomain:=DupMbToWsString(g_lpDomain);
  pMprNotifyInfo^.pszPassword:=DupMbToWsString(g_lpPassword);
  pMprNotifyInfo^.pszOldPassword := NIL;
  result := WLX_SAS_ACTION_LOGON;
end;
[其他解释]
噢,我的天呀,怎么看好像是VC的源代码呀
不会,顶顶帖子

热点排行