网络安全 频道

创建高权限进程的方法

// 功能 :通过指定进程名得到其进程 ID

// 注意 :

/////////////////////////////////////////////////////////////////

// 作者 : sinister

// 发布版本 : 1.00.00

// 发布日期 : 2006.2.09

/////////////////////////////////////////////////////////////////

// 重   大   修   改   历   史

////////////////////////////////////////////////////////////////

// 修改者 :

// 修改日期 :

// 修改内容 :

/////////////////////////////////////////////////////////////////



DWORD

GetProcessId( LPCTSTR szProcName )

{

PROCESSENTRY32 pe;  

DWORD dwPid;

DWORD dwRet;

BOOL bFound = FALSE;



//

// 通过 TOOHLP32 函数枚举进程

//



HANDLE hSP = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );

if ( hSP )

{

  pe.dwSize = sizeof( pe );



  for ( dwRet = Process32First( hSP, &pe );

      dwRet;

      dwRet = Process32Next( hSP, &pe ) )

  {

    //

    // 使用 StrCmpNI 比较字符传,可忽略大小写

    //

    if ( StrCmpNI( szProcName, pe.szExeFile, strlen( szProcName ) ) == 0 )

    {

    dwPid = pe.th32ProcessID;

    bFound = TRUE;

    break;

    }

  }



  CloseHandle( hSP );



  if ( bFound == TRUE )

  {

    return dwPid;

  }

}



return NULL;

}



/////////////////////////////////////////////////////////////////

// 函数类型 :自定义工具函数

// 函数模块 :

////////////////////////////////////////////////////////////////

// 功能 : 创建具有高权限的进程

// 注意 :

/////////////////////////////////////////////////////////////////

// 作者 : sinister

// 发布版本 : 1.00.00

// 发布日期 : 2006.2.09

/////////////////////////////////////////////////////////////////

// 重   大   修   改   历   史

////////////////////////////////////////////////////////////////

// 修改者 :

// 修改日期 :

// 修改内容 :

/////////////////////////////////////////////////////////////////



BOOL

CreateSystemProcess( LPTSTR szProcessName )

{

HANDLE hProcess;

HANDLE hToken, hNewToken;

DWORD dwPid;



PACL pOldDAcl = NULL;

PACL pNewDAcl = NULL;

BOOL bDAcl;

BOOL bDefDAcl;

DWORD dwRet;



PACL pSacl = NULL;

PSID pSidOwner = NULL;

PSID pSidPrimary = NULL;

DWORD dwAclSize = 0;

DWORD dwSaclSize = 0;

DWORD dwSidOwnLen = 0;

DWORD dwSidPrimLen = 0;



DWORD dwSDLen;

EXPLICIT_ACCESS ea;

PSECURITY_DESCRIPTOR pOrigSd = NULL;

PSECURITY_DESCRIPTOR pNewSd = NULL;



STARTUPINFO si;

PROCESS_INFORMATION pi;



BOOL bError;



if ( !EnableDebugPriv( "SeDebugPrivilege" ) )

{

  printf( "EnableDebugPriv() to failed!\n" );



  bError = TRUE;

  goto Cleanup;

}
0
相关文章