| Index: third_party/psutil/psutil/arch/mswindows/security.c
 | 
| diff --git a/third_party/psutil/psutil/arch/mswindows/security.c b/third_party/psutil/psutil/arch/mswindows/security.c
 | 
| deleted file mode 100644
 | 
| index 5a07df2f5553722448e8688d99bdc3d4f71435c6..0000000000000000000000000000000000000000
 | 
| --- a/third_party/psutil/psutil/arch/mswindows/security.c
 | 
| +++ /dev/null
 | 
| @@ -1,240 +0,0 @@
 | 
| -/*
 | 
| - * $Id: security.c 1142 2011-10-05 18:45:49Z g.rodola $
 | 
| - *
 | 
| - * Copyright (c) 2009, Jay Loden, Giampaolo Rodola'. All rights reserved.
 | 
| - * Use of this source code is governed by a BSD-style license that can be
 | 
| - * found in the LICENSE file.
 | 
| - *
 | 
| - * Security related functions for Windows platform (Set privileges such as
 | 
| - * SeDebug), as well as security helper functions.
 | 
| - */
 | 
| -
 | 
| -#include <windows.h>
 | 
| -#include <Python.h>
 | 
| -
 | 
| -/*
 | 
| - * Convert a process handle to a process token handle.
 | 
| - */
 | 
| -HANDLE
 | 
| -token_from_handle(HANDLE hProcess) {
 | 
| -    HANDLE hToken = NULL;
 | 
| -
 | 
| -    if (! OpenProcessToken(hProcess, TOKEN_QUERY, &hToken) ) {
 | 
| -        return PyErr_SetFromWindowsErr(0);
 | 
| -    }
 | 
| -
 | 
| -    return hToken;
 | 
| -}
 | 
| -
 | 
| -
 | 
| -/*
 | 
| - * http://www.ddj.com/windows/184405986
 | 
| - *
 | 
| - * There's a way to determine whether we're running under the Local System
 | 
| - * account. However (you guessed it), we have to call more Win32 functions to
 | 
| - * determine this. Backing up through the code listing, we need to make another
 | 
| - * call to GetTokenInformation, but instead of passing through the TOKEN_USER
 | 
| - * constant, we pass through the TOKEN_PRIVILEGES constant. This value returns
 | 
| - * an array of privileges that the account has in the environment. Iterating
 | 
| - * through the array, we call the function LookupPrivilegeName looking for the
 | 
| - * string “SeTcbPrivilege. If the function returns this string, then this
 | 
| - * account has Local System privileges
 | 
| - */
 | 
| -int HasSystemPrivilege(HANDLE hProcess) {
 | 
| -    DWORD i;
 | 
| -    DWORD dwSize = 0;
 | 
| -    DWORD dwRetval = 0;
 | 
| -    TCHAR privName[256];
 | 
| -    DWORD dwNameSize = 256;
 | 
| -    //PTOKEN_PRIVILEGES tp = NULL;
 | 
| -    BYTE *pBuffer = NULL;
 | 
| -    TOKEN_PRIVILEGES* tp = NULL;
 | 
| -    HANDLE hToken = token_from_handle(hProcess);
 | 
| -
 | 
| -    if (NULL == hToken) {
 | 
| -        return -1;
 | 
| -    }
 | 
| -
 | 
| -    // call GetTokenInformation first to get the buffer size
 | 
| -    if (! GetTokenInformation(hToken, TokenPrivileges, NULL, 0, &dwSize)) {
 | 
| -        dwRetval = GetLastError();
 | 
| -        // if it failed for a reason other than the buffer, bail out
 | 
| -        if (dwRetval != ERROR_INSUFFICIENT_BUFFER ) {
 | 
| -            PyErr_SetFromWindowsErr(dwRetval);
 | 
| -            return 0;
 | 
| -        }
 | 
| -    }
 | 
| -
 | 
| -    // allocate buffer and call GetTokenInformation again
 | 
| -    //tp = (PTOKEN_PRIVILEGES) GlobalAlloc(GPTR, dwSize);
 | 
| -    pBuffer = (BYTE *) malloc(dwSize);
 | 
| -
 | 
| -    if (pBuffer == NULL) {
 | 
| -        PyErr_SetFromWindowsErr(0);
 | 
| -        LocalFree(pBuffer);
 | 
| -        return -1;
 | 
| -    }
 | 
| -
 | 
| -    if (! GetTokenInformation(hToken, TokenPrivileges, pBuffer, dwSize, &dwSize) ) {
 | 
| -        PyErr_SetFromWindowsErr(0);
 | 
| -        LocalFree(pBuffer);
 | 
| -        return -1;
 | 
| -    }
 | 
| -
 | 
| -    // convert the BYTE buffer to a TOKEN_PRIVILEGES struct pointer
 | 
| -    tp = (TOKEN_PRIVILEGES*)pBuffer;
 | 
| -
 | 
| -    // check all the privileges looking for SeTcbPrivilege
 | 
| -    for(i=0; i < tp->PrivilegeCount; i++) {
 | 
| -        // reset the buffer contents and the buffer size
 | 
| -        strcpy(privName, "");
 | 
| -        dwNameSize = sizeof(privName) / sizeof(TCHAR);
 | 
| -        if (! LookupPrivilegeName(NULL,
 | 
| -                &tp->Privileges[i].Luid,
 | 
| -                (LPTSTR)privName,
 | 
| -                &dwNameSize)) {
 | 
| -
 | 
| -            PyErr_SetFromWindowsErr(0);
 | 
| -            free(pBuffer);
 | 
| -            return -1;
 | 
| -        }
 | 
| -
 | 
| -        // if we find the SeTcbPrivilege then it's a LocalSystem process
 | 
| -        if (! lstrcmpi(privName, TEXT("SeTcbPrivilege"))) {
 | 
| -            free(pBuffer);
 | 
| -            return 1;
 | 
| -        }
 | 
| -
 | 
| -    } //for
 | 
| -
 | 
| -    free(pBuffer);
 | 
| -    return 0;
 | 
| -}
 | 
| -
 | 
| -
 | 
| -BOOL SetPrivilege(HANDLE hToken, LPCTSTR Privilege, BOOL bEnablePrivilege)
 | 
| -{
 | 
| -    TOKEN_PRIVILEGES tp;
 | 
| -    LUID luid;
 | 
| -    TOKEN_PRIVILEGES tpPrevious;
 | 
| -    DWORD cbPrevious=sizeof(TOKEN_PRIVILEGES);
 | 
| -
 | 
| -    if(!LookupPrivilegeValue( NULL, Privilege, &luid )) return FALSE;
 | 
| -
 | 
| -    // first pass.  get current privilege setting
 | 
| -    tp.PrivilegeCount = 1;
 | 
| -    tp.Privileges[0].Luid = luid;
 | 
| -    tp.Privileges[0].Attributes = 0;
 | 
| -
 | 
| -    AdjustTokenPrivileges(
 | 
| -        hToken,
 | 
| -        FALSE,
 | 
| -        &tp,
 | 
| -        sizeof(TOKEN_PRIVILEGES),
 | 
| -        &tpPrevious,
 | 
| -        &cbPrevious
 | 
| -    );
 | 
| -
 | 
| -    if (GetLastError() != ERROR_SUCCESS) return FALSE;
 | 
| -
 | 
| -    // second pass. set privilege based on previous setting
 | 
| -    tpPrevious.PrivilegeCount = 1;
 | 
| -    tpPrevious.Privileges[0].Luid = luid;
 | 
| -
 | 
| -    if(bEnablePrivilege) {
 | 
| -        tpPrevious.Privileges[0].Attributes |= (SE_PRIVILEGE_ENABLED);
 | 
| -    }
 | 
| -
 | 
| -    else {
 | 
| -        tpPrevious.Privileges[0].Attributes ^= (SE_PRIVILEGE_ENABLED &
 | 
| -                tpPrevious.Privileges[0].Attributes);
 | 
| -    }
 | 
| -
 | 
| -    AdjustTokenPrivileges(
 | 
| -        hToken,
 | 
| -        FALSE,
 | 
| -        &tpPrevious,
 | 
| -        cbPrevious,
 | 
| -        NULL,
 | 
| -        NULL
 | 
| -    );
 | 
| -
 | 
| -    if (GetLastError() != ERROR_SUCCESS) return FALSE;
 | 
| -
 | 
| -    return TRUE;
 | 
| -}
 | 
| -
 | 
| -
 | 
| -int SetSeDebug()
 | 
| -{
 | 
| -    HANDLE hToken;
 | 
| -    if(! OpenThreadToken(GetCurrentThread(),
 | 
| -                         TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
 | 
| -                         FALSE,
 | 
| -                         &hToken)
 | 
| -                         ){
 | 
| -        if (GetLastError() == ERROR_NO_TOKEN){
 | 
| -            if (!ImpersonateSelf(SecurityImpersonation)){
 | 
| -                CloseHandle(hToken);
 | 
| -                return 0;
 | 
| -            }
 | 
| -            if (!OpenThreadToken(GetCurrentThread(),
 | 
| -                                 TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
 | 
| -                                 FALSE,
 | 
| -                                 &hToken)
 | 
| -                                 ){
 | 
| -                RevertToSelf();
 | 
| -                CloseHandle(hToken);
 | 
| -                return 0;
 | 
| -            }
 | 
| -        }
 | 
| -    }
 | 
| -
 | 
| -    // enable SeDebugPrivilege (open any process)
 | 
| -    if (! SetPrivilege(hToken, SE_DEBUG_NAME, TRUE)){
 | 
| -        RevertToSelf();
 | 
| -        CloseHandle(hToken);
 | 
| -        return 0;
 | 
| -    }
 | 
| -
 | 
| -    RevertToSelf();
 | 
| -    CloseHandle(hToken);
 | 
| -    return 1;
 | 
| -}
 | 
| -
 | 
| -
 | 
| -int UnsetSeDebug()
 | 
| -{
 | 
| -    HANDLE hToken;
 | 
| -    if(! OpenThreadToken(GetCurrentThread(),
 | 
| -                        TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
 | 
| -                        FALSE,
 | 
| -                        &hToken)
 | 
| -                        ){
 | 
| -        if(GetLastError() == ERROR_NO_TOKEN){
 | 
| -            if(! ImpersonateSelf(SecurityImpersonation)){
 | 
| -                //Log2File("Error setting impersonation! [UnsetSeDebug()]", L_DEBUG);
 | 
| -                return 0;
 | 
| -            }
 | 
| -
 | 
| -            if(!OpenThreadToken(GetCurrentThread(),
 | 
| -                                TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
 | 
| -                                FALSE,
 | 
| -                                &hToken)
 | 
| -                                ){
 | 
| -                //Log2File("Error Opening Thread Token! [UnsetSeDebug()]", L_DEBUG);
 | 
| -                return 0;
 | 
| -            }
 | 
| -        }
 | 
| -    }
 | 
| -
 | 
| -    //now disable SeDebug
 | 
| -    if(!SetPrivilege(hToken, SE_DEBUG_NAME, FALSE)){
 | 
| -        //Log2File("Error unsetting SeDebug Privilege [SetPrivilege()]", L_WARN);
 | 
| -        return 0;
 | 
| -    }
 | 
| -
 | 
| -    CloseHandle(hToken);
 | 
| -    return 1;
 | 
| -}
 | 
| -
 | 
| 
 |