14. [pywin32] SetProcess... 관련 함수

pywin32/win32process|2020. 12. 30. 00:43

1. SetPriorityClass(handle, dwPriorityClass)

 

프로세스의 우선순위 클래스를 설정하는 함수입니다.

 

인자로는 handle : PyHANDLE, dwPriorityClass : int 가 있습니다.

 

handle: 프로세스의 핸들값입니다.

 

dwPriorityClass: 우선순위 클래스로 이전 포스트의 GetPriorityClass 함수를 참조하실 수 있습니다.

 

[pywin32/win32process] - 13. [pywin32] GetProcess... 관련 함수 - 3

 

2. SetProcessAffinityMask(hProcess, mask)

 

CPU 선호도(Affinity)를 설정하는 함수입니다.

 

인자로는 hProcess : PyHANDLE, mask : int 가 있습니다.

 

hProcess: 프로세스의 핸들값입니다.

 

mask: 설정할 CPU 값으로 비트마스크 형식으로 되어있습니다. (CPU0=1, CPU1=2, CPU2=4...., 만약 CPU0,1 둘다 설정하기 위해서는 1+2=3 값을 넣으면 됩니다.) 작업관리자에서 CPU 갯수를 확인할 수 있습니다.

 - SetThreadAffinityMask 함수를 참조하실 수 있습니다.

 

[pywin32/win32process] - 7. [pywin32] SetThreadAffinityMask & SetThreadIdealProcessor 함수

 

7. [pywin32] SetThreadAffinityMask & SetThreadIdealProcessor 함수

1. int = SetThreadAffinityMask(hThread, ThreadAffinityMask ) 쓰레드의 CPU 선호도를 설정합니다. 선호도란 멀티 프로세서의 경우 어떤 CPU에 작업을 할당할 지를 말합니다. 위의 이미지는 작업관리자 > 프로..

ssjune.tistory.com

 

 

3. SetProcessPriorityBoost(Process, DisablePriorityBoost)

 

프로세스의 동적인 우선순위 레벨 상승이 가능하도록 설정하는 함수입니다.

 

인자로는 Process: PyHANDLE, DisablePriorityBoost : boolean가 있습니다.

 

Thread는 쓰레드의 핸들값입니다.

 

DisablePriorityBoost는 동적인 우선순위 레벨 상승이 가능하게 하는 값으로 True/False 입니다.

 - win32con.TRUE: 동적인 우선순위 레벨 상승을 불가능하게 합니다.

 - win32con.FALSE: 동적인 우선순위 레벨 상승을 가능하게 합니다.

값과 의미가 반대인 것에 주의해야 합니다.

 

 

4. SetProcessShutdownParameters(Level, Flags)

 

프로세스의 셧다운 우선순위와 플래그를 설정하는 함수입니다.

 

인자로는 Level : int, Flags : int 가 있습니다.

 

Level: 우선순위로 다음의 값을 갖습니다. 응용프로그램의 프로세스는 0x100 - 0x3FF중에서 설정해야 하는 듯 합니다.

의미
0x000 - 0x0FF 시스템 프로세스가 셧다운 마지막에 종료됨
0x100 - 0x1FF 응용프로그램 프로세스가 셧다운 마지막에 종료됨
0x200 - 0x2FF 응용프로그램 프로세스가 셧다운 중간에 종료됨
0x300 - 0x3FF 응용프로그램 프로세스가 셧다운 처음에 종료됨
0x400 - 0x4FF 시스템 프로세스가 셧다운 처음에 종료됨

 

Flag: 셧다운 플래그로 다음의 값을 갖습니다.

이름 의미
0 - 기본값
1 win32con.SHUTDOWN_NORETRY 프로세스를 종료하는데 지정된 시간보다 오래 걸릴 시 재시도 대화상자를 띄위지 않고 프로세스를 종료함

 

 

5. SetProcessWorkingSetSize(hProcess, MinimumWorkingSetSize, MaximumWorkingSetSize)

 

프로세스이 워킹 셋의 최소/최대 사이즈를 설정하는 함수입니다.

 

인자로는 hProcess : PyHANDLE, MinimumWorkingSetSize : int, MaximumWorkingSetSize : int 가 있습니다.

 

hProcess: 프로세스의 핸들값입니다.

 

MinimumWorkingSetSize: 최소로 설정할 사이즈입니다. (바이트 단위), 설정할 수 있는 최소값은 20page로 만약 1page에 4K(4096 Bytes)라면 최소 81920 Bytes 부터 설정해야 합니다.

 

MaximumWorkingSetSize: 최대로 설정할 사이즈입니다. (바이트 단위), 최소 13page(53248 Bytes) 이상의 값을 설정해야 하며, 최대 시스템에서 지원하는 최대값에서 512page를 뺀 값까지 설정할 수 있습니다.

 

만약 MinimumWorkingSetSize와 MaximumWorkingSetSize가 둘다 -1로 설정한다면, 프로세스의 워킹 셋에서 가능한 많은 page를 제거합니다.

 

 

import win32process
import win32con
import win32event

prog = "C:/Users/admin/Documents/notepad.exe"
# 프로그램 경로

pinfo = win32process.STARTUPINFO()

pHandle = win32process.CreateProcess(prog, None, None, None, win32con.FALSE, \
                                     win32con.CREATE_NEW_CONSOLE, None, None, pinfo)

win32event.WaitForSingleObject(pHandle[0], 2000)

priorityClass = win32process.GetPriorityClass(pHandle[0])
affinityMask = win32process.GetProcessAffinityMask(pHandle[0])
priorityBoost = win32process.GetProcessPriorityBoost(pHandle[0])
shutdownParam = win32process.GetProcessShutdownParameters()
workingSize = win32process.GetProcessWorkingSetSize(pHandle[0])

print(f"priorityClass : {priorityClass}")
print(f"affinityMask : {affinityMask}")
print(f"priorityBoost : {priorityBoost}")
print(f"shutdownParam : {shutdownParam}")
print(f"workingSize : {workingSize}")

win32process.SetPriorityClass(pHandle[0], win32process.HIGH_PRIORITY_CLASS)
win32process.SetProcessAffinityMask(pHandle[0], 0x01)
win32process.SetProcessPriorityBoost(pHandle[0], win32con.TRUE)
win32process.SetProcessShutdownParameters(0x100, win32con.SHUTDOWN_NORETRY)
win32process.SetProcessWorkingSetSize(pHandle[0], -1, -1)


priorityClass = win32process.GetPriorityClass(pHandle[0])
affinityMask = win32process.GetProcessAffinityMask(pHandle[0])
priorityBoost = win32process.GetProcessPriorityBoost(pHandle[0])
shutdownParam = win32process.GetProcessShutdownParameters()
workingSize = win32process.GetProcessWorkingSetSize(pHandle[0])

print(f"new priorityClass : {priorityClass}")
print(f"new affinityMask : {affinityMask}")
print(f"new priorityBoost : {priorityBoost}")
print(f"new shutdownParam : {shutdownParam}")
print(f"new workingSize : {workingSize}")

위의 코드를 실행한 결과입니다.

 

 

 

 

반응형

댓글()

13. [pywin32] GetProcess... 관련 함수 - 3

pywin32/win32process|2020. 12. 29. 00:46

1. int = GetPriorityClass(handle)

 

프로세스의 우선순위를 클래스를 반환하는 함수입니다.

 

인자로는 handle : PyHANDLE 가 있습니다.

 

handle: 프로세스의 핸들값입니다.

 

리턴값은 다음과 같습니다.

이름 의미
0x8000 win32process.ABOVE_NORMAL_PRIORITY_CLASS NORMAL 이상, HIGH 이하의 우선순위 클래스
0x4000 win32process.BELOW_NORMAL_PRIORITY_CLASS IDLE 이상, NORMAL 이하의 우선순위 클래스
0x0080 win32process.HIGH_PRIORITY_CLASS NORMAL, IDLE 보다 높은 우선순위 클래스
0x0040 win32process.IDLE_PRIORITY_CLASS 화면 보호기 처럼 유휴 상태에서 동작하는 우선순위
0x0020 win32process.NORMAL_PRIORITY_CLASS 기본 보통 우선순위 클래스
0x0100 win32process.REALTIME_PRIORITY_CLASS 실시간 우선순위 클래스, 남용하면 마우스 입력 같은 기본적인 입출력 프로세스가 우선순위를 빼앗길 수 있음

 

 

2. int, int = GetProcessAffinityMask(hProcess)

 

CPU 선호도(Affinity)를 반환하는 함수입니다.

 

인자로는 hProcess : PyHANDLE 가 있습니다.

 

hProcess: 프로세스의 핸들값입니다.

 

리턴값은 int,int 로 비트마스크 값이며 앞에는 프로세스 선호도 값이고, 뒤에는 시스템의 선호도 값을 나타냅니다.

 

 

3. bool = GetProcessPriorityBoost(Process)

 

프로세스의 동적인 우선순위 레벨 상승이 가능한지 여부를 반환하는 함수입니다.

 

인자로는 Process : PyHANDLE가 있습니다.

 

Process: 프로세스의 핸들값입니다.

 

리턴값이 True 일 경우, 동적 상승이 불가능하며, False일 경우, 동적 상승이 가능하다는 뜻으로 True와 False가 반대인 것에 주의해야 합니다.

 

 

4. int,int = GetProcessShutdownParameters()

 

현재 프로세스의 셧다운 우선순위와 플래그를 반환합니다.

 

리턴값은 int, int로 앞에는 셧다운 우선순위, 뒤에는 셧다운 플래그를 나타냅니다.

 - 셧다운 우선순위

의미
0x000 - 0x0FF 시스템 프로세스가 셧다운 마지막에 종료됨
0x100 - 0x1FF 응용프로그램 프로세스가 셧다운 마지막에 종료됨
0x200 - 0x2FF 응용프로그램 프로세스가 셧다운 중간에 종료됨
0x300 - 0x3FF 응용프로그램 프로세스가 셧다운 처음에 종료됨
0x400 - 0x4FF 시스템 프로세스가 셧다운 처음에 종료됨

모든 프로세스는 0x280 우선순위를 기본으로 갖습니다.

 

 - 셧다운 플래그

이름 의미
0 - 기본값
1 win32con.SHUTDOWN_NORETRY 프로세스를 종료하는데 지정된 시간보다 오래 걸릴 시 재시도 대화상자를 띄위지 않고 프로세스를 종료함

 

 

5. int,int = GetProcessWorkingSetSize(hProcess)

 

워킹 셋 사이즈를 반환하는 함수입니다.

 

인자로는 hProcess : PyHANDLE 가 있습니다.

 

hProcess: 프로세스의 핸들값입니다.

 

리턴값은 int, int로 최소 워킹 셋 사이즈(바이트) 와 최대 워킹 셋 사이즈(바이트)를 나타냅니다.

 

이 함수가 앞에서 다뤘던 GetProcessMemoryInfo 함수의 리턴값과 관련이 있을 것 같은데 이건 아직 잘 모르겠군요...

 

 

import win32process

curPs = win32process.GetCurrentProcess()

priorityClass = win32process.GetPriorityClass(curPs)
affinityMask = win32process.GetProcessAffinityMask(curPs)
priorityBoost = win32process.GetProcessPriorityBoost(curPs)
shutdownParam = win32process.GetProcessShutdownParameters()
workingSize = win32process.GetProcessWorkingSetSize(curPs)

print(f"priorityClass : {priorityClass}")
print(f"affinityMask : {affinityMask}")
print(f"priorityBoost : {priorityBoost}")
print(f"shutdownParam : {shutdownParam}")
print(f"workingSize : {workingSize}")

현재 프로세스의 핸들값을 이용했습니다.

실행결과입니다

 

 

 

 

 

반응형

댓글()

12. [pywin32] GetProcess... 관련 함수 - 2

pywin32/win32process|2020. 12. 28. 00:19

1. int = GetGuiResources(Process, Flags )

 

프로세스의 GDI 혹은 USER Object 핸들 갯수를 반환하는 함수입니다.

GDI Object는 그래픽 출력과 관련있는 Object를 말하는 듯 합니다.(ex. bitmap, brush...)

 - MSDN 사이트의 GDI Objects 참조

 

USER Object는 사용자 인터페이스와 관련있는 Object를 말하는 듯 합니다.(ex. window, menu...)

 - MSDN 사이트의 USER Objects 참조

 

인자로는 Process : PyHANDLE, Flags : int 가 있습니다.

 

Process: 프로세스의 핸들값입니다. (PROCESS_QUERY_INFORMATION 권한 필요)

 

Flags: 어떤 Object를 반환할지 정하는 값입니다.

 - win32con.GR_GDIOBJECTS: GDI Object의 갯수

 - win32con.GR_USEROBJECTS: USER Object의 갯수

 

리턴값은 GUI Object의 갯수입니다.

 

 

2. dict = GetProcessIoCounters(hProcess)

 

프로세스의 I/O 통계를 반환합니다. IO_COUNTERS 구조체에 맵핑됩니다.

 

인자로는 hProcess : PyHANDLE 가 있습니다.

 

hProcess: 프로세스의 핸들값입니다. (PROCESS_QUERY_INFORMATION 권한 or PROCESS_QUERY_LIMITED_INFORMATION 권한 필요)

 

리턴값은 dict 형으로 IO_COUNTERS 구조체에 맵핑됩니다.

 - ReadOperationCount: 읽기 동작이 수행된 횟수

 - WriteOperationCount: 쓰기 동작이 수행된 횟수

 - OtherOperationCount: 읽기와 쓰기를 제외한 I/O 동작이 수행된 횟수

 - ReadTransferCount: 읽기 동작에 사용된 바이트 수

 - WriteTransferCount: 쓰기 동작에 사용된 바이트 수

 - OtherTransferCount: 읽기와 쓰기를 제외한 I/O 동작에 사용된 바이트 수

 

 

3. dict = GetProcessMemoryInfo(hProcess)

 

프로세스의 메모리 통계를 반환합니다. PROCESS_MEMORY_COUNTERS 구조체에 맵핑됩니다.

 

인자로는 hProcess : PyHANDLE 가 있습니다.

 

hProcess: 프로세스의 핸들값입니다. (PROCESS_QUERY_INFORMATION 권한 or PROCESS_QUERY_LIMITED_INFORMATION 권한 필요)

 

리턴값은 dict 형으로 PROCESS_MEMORY_COUNTERS 구조체에 맵핑됩니다.

 - PageFaultCount: 페이지 폴트의 수
 - PeakWorkingSetSize: 최대 워킹 셋 사이즈 (바이트)
 - WorkingSetSize: 현재 워킹 셋 사이즈 (바이트)
 - QuotaPeakPagedPoolUsage: 최대 페이징 풀 사용량 (바이트)
 - QuotaPagedPoolUsage: 현재 페이징 풀 사용량 (바이트)
 - QuotaPeakNonPagedPoolUsage: 최대 non 페이징 풀 사용량 (바이트)
 - QuotaNonPagedPoolUsage: 현재 non 페이징 풀 사용량 (바이트)
 - PagefileUsage: 메모리 관리자가 실행중인 메모리에 커밋한 총 메모리(Commit Charge) 양 (바이트)
 - PeakPagefileUsage: 이 프로세스의 동작 중 Commit Charge 최대 값 (바이트)

 

 

4. dict = GetProcessTimes(hProcess)

 

프로세스의 시간정보를 반환하는 함수입니다.

 

인자로는 hProcess : PyHANDLE가 있습니다.

 

hProcess: 프로세스의 핸들값입니다.

 

리턴값은 dict 형태로, 4개의 값을 리턴합니다.

 - CreationTim: 프로세스가 생성된 시간입니다.

 - ExitTime: 프로세스가 종료된 시간입니다.

 - KernelTime: 프로세스가 커널모드에서 동작한 시간입니다.

 - UserTime: 프로세스가 유저모드에서 동작한 시간입니다.

 

 

5. int = GetProcessVersion(processId)

 

프로세스가 실행되는 시스템의 메이저, 마이너 번호를 반환합니다.

 

인자로는 processId : int 가 있습니다.

 

리턴값은 메이저, 마이너 번호가 합쳐진 값이며, high word 부분이 메이저 번호, low word 부분이 마이너 번호입니다. 이를 나누기 위해서 win32api의 HIWORD, LOWORD 함수를 사용하였습니다.

 

 

import win32process
import win32con
import win32api


curPs = win32process.GetCurrentProcess()
curPsId = win32process.GetCurrentProcessId()

gdiCnt = win32process.GetGuiResources(curPs, win32con.GR_GDIOBJECTS)
userCnt = win32process.GetGuiResources(curPs, win32con.GR_USEROBJECTS)

ioConuters = win32process.GetProcessIoCounters(curPs)
psMemInfo = win32process.GetProcessMemoryInfo(curPs)
psTime = win32process.GetProcessTimes(curPs)
psVer = win32process.GetProcessVersion(curPsId)
majorPsVer = win32api.HIWORD(psVer)
minorPsVer = win32api.LOWORD(psVer)

print(f"GDI Objects count : {gdiCnt}")
print(f"USER Objects count : {userCnt}")
print(f"IO Counters : {ioConuters}")
print(f"Memory Info : {psMemInfo}")
print(f"Procsss Time : {psTime}")
print(f"Process Major Version : {majorPsVer}")
print(f"Process Minor Version : {minorPsVer}")

위의 코드를 실행한 결과입니다.

 

 

 

 

 

반응형

댓글()

11. [pywin32] EnumProcess 관련 함수

pywin32/win32process|2020. 12. 27. 00:42

1. (long,....) = EnumProcesses()

 

현재 동작하는 프로세스를 열거하는 함수입니다.

 

리턴값은 현재 동작하는 프로세스 아이디 목록입니다.

 

 

2. (long,....) = EnumProcessModules(hProcess)

 

특정 프로세스가 사용하는 모듈의 목록을 반환합니다.

 

인자로는 hProcess : PyHANDLE 가 있습니다.

 

hProcess: 프로세스 핸들값입니다.

 

리턴값은 프로세스가 사용하는 모듈의 핸들값 목록입니다.

 

 

3. (long,....) = EnumProcessModulesEx(hProcess, FilterFlag )

 

EnumProcessModules 처럼 특정 프로세스가 사용하는 모듈의 목록을 반환합니다. 하지만 FilterFlag 변수를 이용해 특정 모듈만 반환할 수 있습니다.

 

인자로는 hProcess : PyHANDLE, FilterFlag=LIST_MODULES_DEFAULT : int 가 있습니다.

 

hProcess: 프로세스 핸들값입니다.

 

FilterFlag: 32bit와 64bit 모듈 중 어떤걸 혹은 다 반환할 지 정하는 값입니다.

이름 의미
0x01 win32process.LIST_MODULES_32BIT 32bit 모듈만을 반환합니다.
0x02 win32process.LIST_MODULES_64BIT 64bit 모듈만을 반환합니다.
0x03 win32process.LIST_MODULES_ALL 모든 모듈을 반환합니다.
0x0 win32process.LIST_MODULES_DEFAULT 기본 동작입니다.

리턴값은 프로세스가 사용하는 모듈의 핸들값 목록입니다. 

 

 

4. PyUNICODE = GetModuleFileNameEx(hProcess, hModule )

 

프로세스나 모듈의 이름을 반환합니다.

 

인자로는 hProcess : PyHANDLE, hModule : PyHANDLE 가 있습니다.

 

hProcess: 프로세스 핸들값입니다.

 

hModule: 모듈의 핸들값입니다.

 - 만약, 이 값은 None으로 준다면 hProcess의 프로세스 이름을 반환합니다.

 

리턴값은 프로세스 혹은 모듈의 이름입니다.

 

 

import win32process
import win32api
import win32con


enumProcesses = win32process.EnumProcesses()

for pid in enumProcesses:
    try:        
        if pid==0 or pid==4:
            print(f"{pid} is system process!!")
        else:
            psHandle = win32api.OpenProcess(win32con.MAXIMUM_ALLOWED, \
                                 win32con.FALSE, \
                                 pid)
            
            #enumModule = win32process.EnumProcessModules(psHandle)
            enumModule = win32process.EnumProcessModulesEx(psHandle, win32process.LIST_MODULES_DEFAULT)
   
            psName = win32process.GetModuleFileNameEx(psHandle, None)

            for mod in enumModule:
                mdName = win32process.GetModuleFileNameEx(psHandle, mod)

                print(f"{pid} processName: {psName} module Name : {mdName}")


            win32api.CloseHandle(psHandle)

    except Exception as e:
        print(f"{pid} is error : {e}")

프로세스 핸들값을 얻기 위해 OpenProcess를 사용했으며, 이에 대한 설명은 win32api에서 다루겠습니다. 0과 4의 경우는 시스템 프로세스라 따로 뺐고, 이 외에도 OpenProcess를 통해 프로세스 핸들값은 얻어오지 못하는 프로세스들이 많더라구요... 일단을 핸들값을 얻을 수 있는 애들로만 진행했습니다. 위 예제는 파이썬을 관리자 권한으로 실행시킨 후 진행하셔야 합니다.

 

아래는 결과입니다.

 

 

 

 

 

반응형

댓글()

10. [pywin32] GetProcess... 관련 함수 - 1

pywin32/win32process|2020. 12. 26. 00:17

1. int = GetCurrentProcess()

 

현재 프로세스의 핸들값을 반환하는 함수입니다.

 

리턴값은 현재 프로세스의 핸들값입니다. 그런데 보안을 위해서인지 -1을 반환하는 것으로 고정되어 있습니다.

 

 

2. int = GetCurrentProcessId()

 

현재 프로세스의 아이디를 반환하는 함수입니다.

 

리턴값은 현재 프로세스의 아이디입니다.

 

 

3. int = GetProcessId(Process)

 

특정 프로세스의 아이디를 반환하는 함수입니다.

 

인자로는 Process : PyHANDLE 가 있습니다.

 

Process: 특정 프로세스의 핸들값입니다.

 

리턴값은 특정 프로세스의 아이디입니다.

 

 

import win32process

curPs = win32process.GetCurrentProcess()
curPsId = win32process.GetCurrentProcessId()
psId = win32process.GetProcessId(curPs)

print(f"curPs : {curPs}")
print(f"curPsId : {curPsId}")
print(f"psId : {psId}")

현재 프로세스의 아이디와 핸들값을 이용한 아이디를 출력합니다.

 

 

 

 

반응형

댓글()

9. [pywin32] ExitProcess & TerminateProcee 및 관련 함수

pywin32/win32process|2020. 12. 25. 00:25

1. ExitProcess(exitCode)

 

현재 프로세스를 종료시키는 함수입니다.

 

인자로는 exitCode : int가 있습니다.

 

exitCode: 프로세스가 종료될 때 종료 코드를 설정합니다.

 

 

2. TerminateProcess(handle, exitCode)

 

지정된 프로세스를 종료시키는 함수입니다.

 

인자로는 handle : PyHANDLE, exitCode : int 가 있습니다.

 

handle: 종료시킬 프로세스의 핸들값입니다.

 

exitCode: 프로세스가 종료될 때 종료 코드를 설정합니다.

 

 

3. int = GetExitCodeProcess(handle)

 

지정된 프로세스 핸들로 부터 종료 코드를 반환합니다.

 

인자로는 handle : PyHANDLE 가 있습니다.

 

handle: 종료 코드를 가져올 프로세스의 핸들값입니다.

 

 

import win32process
import win32con
import win32api
import win32event

prog = "C:/Users/admin/Documents/notepad.exe"
# 프로그램 경로


pinfo = win32process.STARTUPINFO()

pHandle = win32process.CreateProcess(prog, None, None, None, win32con.FALSE, \
                                     win32con.CREATE_NEW_CONSOLE, None, None, pinfo)

win32event.WaitForSingleObject(pHandle[0], 3000)

win32process.TerminateProcess(pHandle[0], 3)

errCode = win32process.GetExitCodeProcess(pHandle[0])

print(f"errCode : {errCode}")

win32process.ExitProcess(5)

이번에는 메모장을 이용해봤습니다. 메모장이 열리기는 3초간 기다린 후 종료시킵니다. 종료 코드는 3으로 설정했고요. 현재 프로세스를 종료시키면서 종료 코드를 5로 설정했지만 이건 프로세스가 종료되면서 프로세스 핸들값을 가져올 수 없어 확인은 못했으나, 제대로 설정 됐을 겁니다.ㅎㅎ

 

 

 

 

 

반응형

댓글()

8. [pywin32] CreateProcess 및 기타 함수

pywin32/win32process|2020. 12. 24. 00:33

1. PySTARTUPINFO = STARTUPINFO()

 

STARTUPINFO 구조체를 생성하는 함수입니다. 프로세스를 만들 때 사용하기 때문에 처음에 호출해주어야 합니다.

 

다음의 멤버를 갖고 있습니다.

 

integer dwX: 왼쪽 위의 x 좌표, dwFlags에 win32process.STARTF_USEPOSITION 을 설정해주어야 합니다.

 

integer dwY: 왼쪽 위의 y 좌표, dwFlags에 win32process.STARTF_USEPOSITION 을 설정해주어야 합니다.

 

integer dwXSize: 넓이, dwFlags에 win32process.STARTF_USESIZE을 설정해주어야 합니다.

 

integer dwYSize: 높이, dwFlags에 win32process.STARTF_USESIZE을 설정해주어야 합니다.

 

integer dwXCountChars: 콘솔 프로세스의 경우, 화면 넓이를 지정합니다. (GUI 프로세스의 경우 무시됨), dwFlags에 win32process.STARTF_USECOUNTCHARS을 설정해주어야 합니다.

 

integer dwYCountChars: 콘솔 프로세스의 경우, 화면 높이를 지정합니다. (GUI 프로세스의 경우 무시됨), dwFlags에 win32process.STARTF_USECOUNTCHARS을 설정해주어야 합니다.

 

integer dwFillAttribute: 콘솔 프로세스의 경우, 초기 텍스트와 배경 화면 색을 지정합니다. (GUI 프로세스의 경우 무시됨), dwFlags에 win32process.STARTF_USEFILLATTRIBUTE를 설정해주어야 합니다.

 

integer dwFlags: STARTUPINFO의 속성을 지정합니다. win32con.STARTF_* or win32process.STARTF_* 값을 이용합니다.

 - 자세한 속성값은 MSDN의 STARTUPINFO 구조체에 대한 설명을 참조

 

integer wShowWindow: 윈도우를 어떻게 보여줄지를 지정합니다. win32con.SW_* 값을 이용합니다. dwFlags에 win32process.STARTF_USESHOWWINDOW를 설정해주어야 합니다.

 - 자세한 속성값은 MSDN의 ShowWindow 함수에 대한 설명을 참조

 

integer/PyHANDLE hStdInput: 기본 입출력 핸들 설정과 관련있는 것 같습니다. 여기서는 None으로 설정하였습니다.

 

integer/PyHANDLE hStdOutput: 기본 입출력 핸들 설정과 관련있는 것 같습니다. 여기서는 None으로 설정하였습니다.

 

integer/PyHANDLE hStdError: 기본 입출력 핸들 설정과 관련있는 것 같습니다. 여기서는 None으로 설정하였습니다.

 

string/None lpDesktop: 프로세스가 실행될 윈도우 스테이션과 데스크탑을 지정합니다. 여기서는 None으로 설정하였습니다.

 

string/None lpTitle: 윈도우의 제목을 설정해줍니다.

 

 

2. PyHANDLE, PyHANDLE, int, int = CreateProcess(appName, commandLine , processAttributes , threadAttributes , bInheritHandles , dwCreationFlags , newEnvironment , currentDirectory , startupinfo )

 

프로세스를 생성하는 함수입니다. exe 확장자로 끝나는 프로그램만 실행시킬 수 있는 듯 합니다.

 

인자로는 appName : string, commandLine : string, processAttributes : PySECURITY_ATTRIBUTES, threadAttributes : PySECURITY_ATTRIBUTES, bInheritHandles : int, dwCreationFlags : int, newEnvironment : dictionary/None, currentDirectory : string, startupinfo : PySTARTUPINFO 가 있습니다.

 

appName: 실행할 프로그램(exe)의 절대경로입니다.

 

commandLine: appName과 관련된 명령어입니다. 혹은 appName을 None으로 두고 여기서 프로그램 절대경로 까지 넣는 방법도 있습니다.(이 경우 경로를 \\으로 감싸주어야 합니다.)

 

processAttributes: 프로세스의 보안 속성으로 여기서는 None으로 설정하였습니다.

 

threadAttributes: 프로세스 내 쓰레드의 보안 속성으로 여기서는 None으로 설정하였습니다.

 

bInheritHandles: 부모 프로세스의 보안 속성을 상속할지를 정하는 값입니다. win32con.TRUE/win32con.FALSE 2가지 값이 있습니다.

 

dwCreationFlag: 프로세스 생성 시 조건을 설정합니다. 여기서는 win32con.CREATE_NEW_CONSOLE으로 설정하였습니다.(기본값)

 - 자세한 속성값은 MSDN의 Process Creation Flags에 대한 설명을 참조

 

newEnvironment: 프로세스의 환경 구성을 설정합니다. 여기서는 None으로 설정하였습니다.(부모 프로세스의 환경 구성 사용)

 

currentDirectory: 프로세스의 현재 폴더 경로를 적어줍니다. 여기서는 None으로 설정하였습니다.(부모 프로세스의 폴더 사용)

 

startupinfo: 위에서 만든 STARTUPINFO 구조체 변수를 넣어줍니다.

 

 

3. PySTARTUPINFO = GetStartupInfo()

 

해당 함수를 호출한 프로세스의 STARTUPINFO 구조체를 반환합니다.

 

이건 특정 프로세스를 타겟으로 호출할 수는 없나 봅니다.(무조건 해당 프로세스의 구조체를 반환)

 

 

4. bool = IsWow64Process(Process)

 

해당 프로세스가 WOW64에서 실행 중인지 확인합니다. 32bit 프로세스의 경우 64bit 윈도우에서 실행되기 위해서 WOW64라는 에뮬레이터를 이용하는데 이걸 확인하는 함수입니다.

 

인자로는 Process=None : PyHANDLE가 있습니다.

 

Process: 확인할 프로세스의 핸들값입니다. 기본값은 None이며, 현재 프로세스를 뜻합니다.

 

리턴값은 True/False 입니다.

 - True: 32bit 프로세스가 64bit 윈도우에서 실행되는 경우 입니다.

 - False: True를 제외한 경우입니다.

 

 

import win32process
import win32con
import win32api
import win32event

prog = "C:/Users/admin/Downloads/ProcessExplorer/procexp.exe"
# 프로그램 경로

pinfo = win32process.STARTUPINFO()

pHandle = win32process.CreateProcess(prog, None, None, None, win32con.FALSE, \
                                     win32con.CREATE_NEW_CONSOLE, None, None, pinfo)

pinfo2 = win32process.GetStartupInfo()

isWOW64 = win32process.IsWow64Process(pHandle[0])
# 32pro on 64bit : true 

win32event.WaitForSingleObject(pHandle[0], 3000)

print(f"isWOW64 : {isWOW64}")

위에서 사용한 prog의 프로그램은 process explorer 입니다. 적절한 32bit 프로그램을 사용하기 위해서 입니다. 64bit OS에서 32bit 프로그램으로 프로세스를 생성하여 IsWow64Process가 True를 반환하였습니다. GetStartupInfo의 경우 호출한 프로세스의 STARTUPINFO 구조체를 반환하여 처음 생성한 STARTUPINFO 구조체와 다른 값이 들어가 있습니다.

 

 

 

 

반응형

댓글()

7. [pywin32] SetThreadAffinityMask & SetThreadIdealProcessor 함수

pywin32/win32process|2020. 12. 23. 00:09

1. int = SetThreadAffinityMask(hThread, ThreadAffinityMask )

 

쓰레드의 CPU 선호도를 설정합니다. 선호도란 멀티 프로세서의 경우 어떤 CPU에 작업을 할당할 지를 말합니다.

 

 

위의 이미지는 작업관리자 > 프로세스 > 선호도 설정의 창입니다. 여기서 CPU를 설정하는 것처럼 이 함수를 통해 설정이 가능합니다. 물론 이건 프로세스의 CPU 선호도를 보여주는 거라 쓰레드도 이렇다 라고 참조만 해주시면 되겠습니다.

 

인자로는 hThread : PyHANDLE, ThreadAffinityMask : int 가 있습니다.

 

hThread: 쓰레드의 핸들값입니다.

 

 

ThreadAffinityMask: 설정할 CPU 값으로 비트마스크 형식으로 되어있습니다. (CPU0=1, CPU1=2, CPU2=4...., 만약 CPU0,1 둘다 설정하기 위해서는 1+2=3 값을 넣으면 됩니다.) 작업관리자에서 CPU 갯수를 확인할 수 있습니다.

 

리턴값은 기존의 AffinityMask 값입니다.

 

2. int = SetThreadIdealProcessor(handle, dwIdealProcessor )

 

쓰레드가 가능한 경우 이 프로세서에서 실행됬으면 좋겠다. 라고 설정하는 함수입니다.

 

인자로는 handle : PyHANDLE, dwIdealProcessor : int 가 있습니다.

 

handle: 쓰레드의 핸들값입니다.

 

dwIdealProcessor: 이상적인 프로세서로 지정할 값입니다. 0부터 시작하며 CPU0=0, CPU1=1, CPU2=..., AffinityMask와 달리 CPU를 하나만 지정할 수 있습니다.) 작업관리자에서 CPU 갯수를 확인할 수 있습니다.

 - win32process.MAXIMUM_PROCESSORS: 이 값을 넣을 경우, 현재 지정된 IdealProcessor 값을 반환하기만 하며, 설정하지는 않습니다.

 

리턴값은 기존의 IdealProcessor 값입니다.

 

import win32process
import win32api
import win32gui
import win32event
import win32con


def cnt1():
    i = 0    
    return 3
    
 
q = tuple()
res1 = win32process.beginthreadex(None, 0, cnt1, q, win32process.CREATE_SUSPENDED)

preThreadAffMask1 = win32process.SetThreadAffinityMask(res1[0], 1)
preThreadAffMask2 = win32process.SetThreadAffinityMask(res1[0], preThreadAffMask1)
#bit 1248...
#cpu 0123...


preThreadIdealPrc1 = win32process.SetThreadIdealProcessor(res1[0], 1)
preThreadIdealPrc2 = win32process.SetThreadIdealProcessor(res1[0], 0)
preThreadIdealPrc3 = win32process.SetThreadIdealProcessor(res1[0], win32process.MAXIMUM_PROCESSORS)


print(f"pre ThreadAffMask1 : {preThreadAffMask1}")
print(f"pre ThreadAffMask2 : {preThreadAffMask2}")

print(f"pre ThreadIdealProcessor1 : {preThreadIdealPrc1}")
print(f"pre ThreadIdealProcessor2 : {preThreadIdealPrc2}")
print(f"pre ThreadIdealProcessor3 : {preThreadIdealPrc3}")


win32process.ResumeThread(res1[0])
win32event.WaitForSingleObject(res1[0], 3000)

 

실행결과입니다.

 

 

 

반응형

댓글()

6. [pywin32] SetThreadPriority & Boost 함수

pywin32/win32process|2020. 12. 22. 00:43

1. SetThreadPriority(handle, nPriority)

 

쓰레드의 우선순위 레벨을 설정하는 함수입니다.

 

인자로는 handle : PyHANDLE, nPriority : int가 있습니다.

 

handle은 쓰레드의 핸들값입니다.

 

nPriority는 쓰레드의 설정할 우선순위 레벨입니다.

 

* GetThreadPriority 함수에서 설명한 것과 같습니다.

이름 의미
1 win32process.THREAD_PRIORITY_ABOVE_NORMAL 우선순위 클래스보다 1포인트 높음
-1 win32process.THREAD_PRIORITY_BELOW_NORMAL 우선순위 클래스보다 1포인트 낮음
2 win32process.THREAD_PRIORITY_HIGHEST 우선순위 클래스보다 2포인트 높음
-15 win32process.THREAD_PRIORITY_IDLE REALTIME_PRIORITY_CLASS 에서는 기본 우선순위가 16이며 그외에는 1임
-2 win32process.THREAD_PRIORITY_LOWEST 우선순위 클래스보다 2포인트 낮음
0 win32process.THREAD_PRIORITY_NORMAL 우선순위 클래스의 보통 우선순위 레벨
15 win32process.THREAD_PRIORITY_TIME_CRITICAL REALTIME_PRIORITY_CLASS 에서는 기본 우선순위가 31이며 그외에는 15임

 

2. SetThreadPriorityBoost(Thread, DisablePriorityBoost)

 

쓰레드의 동적인 우선순위 레벨 상승이 가능하도록 설정하는 함수입니다.

 

인자로는 Thread : PyHANDLE, DisablePriorityBoost : boolean가 있습니다.

 

Thread는 쓰레드의 핸들값입니다.

 

DisablePriorityBoost는 동적인 우선순위 레벨 상승이 가능하게 하는 값으로 True/False 입니다.

 - win32con.TRUE: 동적인 우선순위 레벨 상승을 불가능하게 합니다.

 - win32con.FALSE: 동적인 우선순위 레벨 상승을 가능하게 합니다.

값과 의미가 반대인 것에 주의해야 합니다.

 

 

import win32process
import win32api
import win32gui
import win32event
import win32con


def cnt1():
    i = 0    
    return 3
    
 
q = tuple()
res1 = win32process.beginthreadex(None, 0, cnt1, q, win32process.CREATE_SUSPENDED)


threadIOPendingFlag = win32process.GetThreadIOPendingFlag(res1[0])
threadPriority = win32process.GetThreadPriority(res1[0])
threadPriorityBoost = win32process.GetThreadPriorityBoost(res1[0])

print(f"threadIOPendingFlag : {threadIOPendingFlag}")
print(f"threadPriority : {threadPriority}")
print(f"threadPriorityBoost : {threadPriorityBoost}")

win32process.SetThreadPriorityBoost(res1[0], win32con.TRUE)
win32process.SetThreadPriority(res1[0], win32process.THREAD_PRIORITY_ABOVE_NORMAL)

threadIOPendingFlag = win32process.GetThreadIOPendingFlag(res1[0])
threadPriority = win32process.GetThreadPriority(res1[0])
threadPriorityBoost = win32process.GetThreadPriorityBoost(res1[0])

print(f"new threadIOPendingFlag : {threadIOPendingFlag}")
print(f"new threadPriority : {threadPriority}")
print(f"new threadPriorityBoostDisable : {threadPriorityBoost}")


win32process.ResumeThread(res1[0])
win32event.WaitForSingleObject(res1[0], 3000)

 

실행결과입니다. 실행 중에 IOPendingFlag가 False에서 True로 바뀌는 결과도 확인했습니다. 우선순위 셋트 중에 I/O 요청이 보류되었나 봅니다....

그리고 ThreadPriorityBoost 같은 경우에는 시스템이 동적으로 우선순위 조정하는 것을 컨트롤하는 함수라 True/False에 따른 영향을 확인하지 못했습니다....

 

 

반응형

댓글()

5. [pywin32] GetThread... 관련 함수

pywin32/win32process|2020. 12. 21. 01:38

이번에 설명할 함수는 다음의 6개 함수에 대해서 설명하려고 합니다.

 

1. int = GetExitCodeThread(handle)

 

쓰레드의 종료 코드를 반환하는 함수입니다. 쓰레드 마지막에 return X 라고 쓰면 X값이 종료 코드가 되는 것입니다.

 

인자로는 handle : PyHANDLE가 있으며, 쓰레드의 핸들값입니다.

 

2. bool = GetThreadIOPendingFlag(Thread)

 

쓰레드에 보류중인 I/O 요청이 있는지 여부를 반환하는 함수입니다.

 

인자로는 Thread : PyHANDLE가 있으며, 쓰레드의 핸들값입니다.

 

리턴값은 True/False 이며,

 - True: 보류중인 I/O 요청이 존재함

 - False: 보류중인 I/O 요청이 존재하지 않음

 

3. int = GetThreadPriority(handle)

 

쓰레드의 우선순위 레벨을 반환하는 함수입니다. 참고로 우선순위는 프로세스에서 쓰는 우선순위 클래스와 쓰레드에서 쓰는 우선순위 레벨이 존재합니다. 프로세스내의 쓰레드는 우선순위 클래스가 동일하며, 우선순위 클래스와 우선순위 레벨을 통해 기본 우선순위를 결정합니다.

 

인자로는 handle : PyHANDLE가 있으며, 쓰레드의 핸들값입니다.

 

리턴값은 다음과 같습니다.

 

이름 의미
1 win32process.THREAD_PRIORITY_ABOVE_NORMAL 우선순위 클래스보다 1포인트 높음
-1 win32process.THREAD_PRIORITY_BELOW_NORMAL 우선순위 클래스보다 1포인트 낮음
2 win32process.THREAD_PRIORITY_HIGHEST 우선순위 클래스보다 2포인트 높음
-15 win32process.THREAD_PRIORITY_IDLE REALTIME_PRIORITY_CLASS 에서는 기본 우선순위가 16이며 그외에는 1임
-2 win32process.THREAD_PRIORITY_LOWEST 우선순위 클래스보다 2포인트 낮음
0 win32process.THREAD_PRIORITY_NORMAL 우선순위 클래스의 보통 우선순위 레벨
15 win32process.THREAD_PRIORITY_TIME_CRITICAL REALTIME_PRIORITY_CLASS 에서는 기본 우선순위가 31이며 그외에는 15임

우선순위 클래스의 종류는 GetPrioiryClass 함수를 다룰 때 설명하겠습니다.

 

4. bool = GetThreadPriorityBoost(Thread)

 

쓰레드의 동적인 우선순위 레벨 상승이 가능한지 여부를 반환하는 함수입니다.

 

인자로는 Thread : PyHANDLE가 있으며, 쓰레드의 핸들값입니다.

 

리턴값이 True 일 경우, 동적 상승이 불가능하며, False일 경우, 동적 상승이 가능하다는 뜻으로 True와 False가 반대인 것에 주의해야 합니다.

 

5. int, int = GetWindowThreadProcessId(hwnd)

 

특정 윈도우를 만든 쓰레드와 프로세스의 아이디를 반환하는 함수입니다.

 

인자로는 hwnd : int가 있습니다, 이건 윈도우 핸들값입니다.

 

리턴값은 (threadId, processId) 순서입니다.

 

6. dict = GetThreadTimes(Thread)

 

쓰레드의 시간정보를 반환하는 함수입니다.

 

인자로는 Thread : PyHANDLE가 있으며, 쓰레드의 핸들값입니다.

 

리턴값은 dict 형태로, 4개의 값을 리턴합니다.

 - CreationTim: 쓰레드가 생성된 시간입니다.

 - ExitTime: 쓰레드가 종료된 시간입니다.

 - KernelTime: 쓰레드가 커널모드에서 동작한 시간입니다.

 - UserTime: 쓰레드가 유저모드에서 동작한 시간입니다.

 

 

import win32process
import win32api
import win32gui
import win32event


def cnt1():
    i = 0    
    return 3
    
q = tuple()
res1 = win32process.beginthreadex(None, 0, cnt1, q, win32process.CREATE_SUSPENDED)
win32process.ResumeThread(res1[0])

win32event.WaitForSingleObject(res1[0], 3000)
# 쓰레드가 종료될때 까지 대기

threadExitCode=win32process.GetExitCodeThread(res1[0])
threadIOPendingFlag = win32process.GetThreadIOPendingFlag(res1[0])
threadPriority = win32process.GetThreadPriority(res1[0])
threadPriorityBoost = win32process.GetThreadPriorityBoost(res1[0])
windHwnd = win32gui.GetForegroundWindow()
# 윈도우 핸들 값 획득
windThPsId = win32process.GetWindowThreadProcessId(windHwnd)
threadTime = win32process.GetThreadTimes(res1[0])


print(f"threadExitCode : {threadExitCode}")
print(f"threadIOPendingFlag : {threadIOPendingFlag}")
print(f"threadPriority : {threadPriority}")
print(f"threadPriorityBoost : {threadPriorityBoost}")
print(f"threadID : {windThPsId[0]}, processId : {windThPsId[1]}")
print(f"threadTime : {threadTime}")

 

실행결과 위와 같은 결과를 얻었다

 

 

반응형

댓글()

4. [pywin32] ResumeThread 함수

pywin32/win32process|2020. 10. 27. 00:44

int = ResumeThread(handle)

 

정지된 쓰레드를 재개하는 함수입니다. SuspendThread 함수가 Suspend count를 올린다면 ResumeThread 함수로 count를 낮춰서 0이되면 쓰레드가 재개됩니다.

 

인자로는 handle : PyHANDLE 가 있습니다.

 

handle은 재개할 쓰레드 핸들입니다.

 

리턴 값은 int로 해당 쓰레드의 이전까지의 정지 카운트입니다.

 

 

import win32process
import win32api


res1 = None
res2 = None


def cnt1():
    global res1
    i = win32process.SuspendThread(res1[0])
    print(f"cnt1 : {i}\n")
    
def cnt2(value):
    print(f"cnt2 : {value}\n")
    i = win32process.SuspendThread(res1[0])
    print(f"cnt2 : {i}\n")
    i = win32process.SuspendThread(res1[0])
    print(f"cnt2 : {i}\n")
    i = win32process.SuspendThread(res1[0])
    print(f"cnt2 : {i}\n")

    win32api.Sleep(1000)
    win32process.ResumeThread(res1[0])
    win32api.Sleep(1000)
    win32process.ResumeThread(res1[0])
    win32api.Sleep(1000)
    win32process.ResumeThread(res1[0])
    win32api.Sleep(1000)
    win32process.ResumeThread(res1[0])

q = tuple()
p = (3,)
res1 = win32process.beginthreadex(None, 0, cnt1, q, 0)
res2 = win32process.beginthreadex(None, 0, cnt2, p, 0)

SuspendThread 함수를 4번 호출했기 때문에 ResumeThread 함수 역시 4번 호출해야 합니다.

 

결과입니다~

 

 

반응형

댓글()

3. [pywin32] SuspendThread 함수

pywin32/win32process|2020. 10. 27. 00:26

int = SuspendThread(handle)

 

쓰레드를 정지시키는 함수입니다.

 

인자로는 handle : PyHANDLE 이 있습니다.

 

handle는 정지시킬 쓰레드 핸들입니다.

 

리턴 값은 int 로 해당 쓰레드의 이전까지의 정지 카운트입니다.

 

 

import win32process
import win32api


res1 = None
res2 = None


def cnt1():
    global res1
    i = win32process.SuspendThread(res1[0])
    print(f"cnt1 : {i}\n")

def cnt2(value):
    print(f"cnt2 : {value}\n")
    win32api.Sleep(3000)
    win32process.ResumeThread(res1[0])
    

q = tuple()
p = (3,)
res1 = win32process.beginthreadex(None, 0, cnt1, q, 0)
res2 = win32process.beginthreadex(None, 0, cnt2, p, 0)

 

cnt2 쓰레드가 먼저 실행되고 3초 후 cnt1 쓰레드가 실행됩니다.

 

결과입니다.~

반응형

댓글()

2. [pywin32] beginthreadex 함수

pywin32/win32process|2020. 10. 27. 00:19

PyHANDLE, int = beginthreadex(sa, stackSize , entryPoint , args , flags )

 

쓰레드를 생성하는 함수입니다.

 

인자로는 sa : PySECURITY_ATTRIBUTES, stackSize : int, entryPoint : function, args : tuple, flags : int 가 있습니다.

 

sa는 보안 속성으로 None으로 두셔도 무방합니다.

 

stackSize는 쓰레드에 할당할 스택의 크기로서 0으로 두시면 기본 스택 사이즈를 사용합니다.

 

entryPoint는 쓰레드로 실행시킬 함수를 넣어주시면 됩니다.

 

args는 튜플 형태로 entryPoint에 맞는 인자를 넣어주시면 됩니다.

 

flags는 쓰레드 시작 상태를 정할 수 있습니다.

 - win32process.CREATE_SUSPENDED : 쓰레드를 생성하지만 바로 시작하지 않습니다. (ResumeThread 함수 필요)

 - 0 : 쓰레드를 생성하고 실행합니다.

 

리턴 값은 [PyHANDLE, int] 로 각각 쓰레드 핸들과 쓰레드 ID 입니다.

 

import win32process
import win32api

res1 = None

def cnt1():
    i = 0    
    print(f"cnt1 : {i}\n")

def cnt2(value):
    global res1
    print(f"cnt2 : {value}\n")
    win32api.Sleep(3000)
    win32process.ResumeThread(res1[0]) 
    

q = tuple()
p = (3,)
res1 = win32process.beginthreadex(None, 0, cnt1, q, win32process.CREATE_SUSPENDED)
res2 = win32process.beginthreadex(None, 0, cnt2, p, 0)

 

2개의 쓰레드를 생성하였습니다. cnt2가 먼저 실행되고 3초후 ResumeThread로 cnt1 쓰레드가 실행됩니다.

 

결과입니다~

 

 

반응형

댓글()

1. [pywin32] win32process 소개

pywin32/win32process|2020. 8. 31. 00:36

윈도우의 프로세스와 쓰레드를 관리하는 api를 다루는 모듈입니다.

 

win32job이 프로세스와 쓰레드를 job으로써 관리하는 모듈이라면 win32process는 프로세스와 쓰레드 그 자체를 다루는 모듈로 보입니다.

 

다음과 같은 46가지 함수를 지원합니다.

 

  • AttachThreadInput - 보류
  • CreateProcess - 8
  • CreateProcessAsUser - 보류
  • CreateRemoteThread - 보류
  • EnumProcessModules - 11
  • EnumProcessModulesEx - 11
  • EnumProcesses - 11
  • ExitProcess - 9
  • GetCurrentProcess - 10
  • GetCurrentProcessId - 10
  • GetExitCodeProcess - 9
  • GetExitCodeThread - 5
  • GetGuiResources - 12
  • GetModuleFileNameEx - 11
  • GetPriorityClass - 13
  • GetProcessAffinityMask - 13
  • GetProcessId - 10
  • GetProcessIoCounters - 12
  • GetProcessMemoryInfo - 12
  • GetProcessPriorityBoost - 13
  • GetProcessShutdownParameters - 13
  • GetProcessTimes - 12
  • GetProcessVersion - 12
  • GetProcessWindowStation - win32service 에서 다룸
  • GetProcessWorkingSetSize - 13
  • GetStartupInfo - 8
  • GetThreadIOPendingFlag - 5
  • GetThreadPriority - 5
  • GetThreadPriorityBoost - 5
  • GetThreadTimes - 5
  • GetWindowThreadProcessId - 5
  • IsWow64Process - 8
  • ResumeThread - 4
  • STARTUPINFO - 8
  • SetPriorityClass - 14
  • SetProcessAffinityMask - 14
  • SetProcessPriorityBoost - 14
  • SetProcessShutdownParameters - 14
  • SetProcessWorkingSetSize - 14
  • SetThreadAffinityMask - 7
  • SetThreadIdealProcessor - 7
  • SetThreadPriority - 6
  • SetThreadPriorityBoost - 6
  • SuspendThread - 3
  • TerminateProcess - 9
  • beginthreadex - 2

 

[pywin32/win32process] - 2. [pywin32] beginthreadex 함수

 

2. [pywin32] beginthreadex 함수

PyHANDLE, int = beginthreadex(sa, stackSize , entryPoint , args , flags ) 쓰레드를 생성하는 함수입니다. 인자로는 sa : PySECURITY_ATTRIBUTES, stackSize : int, entryPoint : function, args : tuple, fla..

ssjune.tistory.com

[pywin32/win32process] - 3. [pywin32] SuspendThread 함수

 

3. [pywin32] SuspendThread 함수

int = SuspendThread(handle) 쓰레드를 정지시키는 함수입니다. 인자로는 handle : PyHANDLE 이 있습니다. handle는 정지시킬 쓰레드 핸들입니다. 리턴 값은 int 로 해당 쓰레드의 이전까지의 정지 카운트입니다

ssjune.tistory.com

[pywin32/win32process] - 4. [pywin32] ResumeThread 함수

 

4. [pywin32] ResumeThread 함수

int = ResumeThread(handle) 정지된 쓰레드를 재개하는 함수입니다. SuspendThread 함수가 Suspend count를 올린다면 ResumeThread 함수로 count를 낮춰서 0이되면 쓰레드가 재개됩니다. 인자로는 handle : PyHAND..

ssjune.tistory.com

[pywin32/win32process] - 5. [pywin32] GetThread... 관련 함수

 

5. [pywin32] GetThread... 관련 함수

이번에 설명할 함수는 다음의 6개 함수에 대해서 설명하려고 합니다. 1. int = GetExitCodeThread(handle) 쓰레드의 종료 코드를 반환하는 함수입니다. 쓰레드 마지막에 return X 라고 쓰면 X값이 종료 코드

ssjune.tistory.com

[pywin32/win32process] - 6. [pywin32] SetThreadPriority & Boost 함수

 

6. [pywin32] SetThreadPriority & Boost 함수

1. SetThreadPriority(handle, nPriority) 쓰레드의 우선순위 레벨을 설정하는 함수입니다. 인자로는 handle : PyHANDLE, nPriority : int가 있습니다. handle은 쓰레드의 핸들값입니다. nPriority는 쓰레드의 설..

ssjune.tistory.com

[pywin32/win32process] - 7. [pywin32] SetThreadAffinityMask & SetThreadIdealProcessor 함수

 

7. [pywin32] SetThreadAffinityMask & SetThreadIdealProcessor 함수

1. int = SetThreadAffinityMask(hThread, ThreadAffinityMask ) 쓰레드의 CPU 선호도를 설정합니다. 선호도란 멀티 프로세서의 경우 어떤 CPU에 작업을 할당할 지를 말합니다. 위의 이미지는 작업관리자 > 프로..

ssjune.tistory.com

[pywin32/win32process] - 8. [pywin32] CreateProcess 및 기타 함수

 

8. [pywin32] CreateProcess 및 기타 함수

1. PySTARTUPINFO = STARTUPINFO() STARTUPINFO 구조체를 생성하는 함수입니다. 프로세스를 만들 때 사용하기 때문에 처음에 호출해주어야 합니다. 다음의 멤버를 갖고 있습니다. integer dwX: 왼쪽 위의 x 좌표,.

ssjune.tistory.com

[pywin32/win32process] - 9. [pywin32] ExitProcess & TerminateProcee 및 관련 함수

 

9. [pywin32] ExitProcess & TerminateProcee 및 관련 함수

1. ExitProcess(exitCode) 현재 프로세스를 종료시키는 함수입니다. 인자로는 exitCode : int가 있습니다. exitCode: 프로세스가 종료될 때 종료 코드를 설정합니다. 2. TerminateProcess(handle, exitCode) 지정..

ssjune.tistory.com

[pywin32/win32process] - 10. [pywin32] GetProcess... 관련 함수 - 1

 

10. [pywin32] GetProcess... 관련 함수 - 1

1. int = GetCurrentProcess() 현재 프로세스의 핸들값을 반환하는 함수입니다. 리턴값은 현재 프로세스의 핸들값입니다. 그런데 보안을 위해서인지 -1을 반환하는 것으로 고정되어 있습니다. 2. int = GetC

ssjune.tistory.com

[pywin32/win32process] - 11. [pywin32] EnumProcess 관련 함수

 

11. [pywin32] EnumProcess 관련 함수

1. (long,....) = EnumProcesses() 현재 동작하는 프로세스를 열거하는 함수입니다. 리턴값은 현재 동작하는 프로세스 아이디 목록입니다. 2. (long,....) = EnumProcessModules(hProcess) 특정 프로세스가 사용하..

ssjune.tistory.com

[pywin32/win32process] - 12. [pywin32] GetProcess... 관련 함수 - 2

 

12. [pywin32] GetProcess... 관련 함수 - 2

1. int = GetGuiResources(Process, Flags ) 프로세스의 GDI 혹은 USER Object 핸들 갯수를 반환하는 함수입니다. GDI Object는 그래픽 출력과 관련있는 Object를 말하는 듯 합니다.(ex. bitmap, brush...)  - MS..

ssjune.tistory.com

[pywin32/win32process] - 13. [pywin32] GetProcess... 관련 함수 - 3

 

13. [pywin32] GetProcess... 관련 함수 - 3

1. int = GetPriorityClass(handle) 프로세스의 우선순위를 클래스를 반환하는 함수입니다. 인자로는 handle : PyHANDLE 가 있습니다. handle: 프로세스의 핸들값입니다. 리턴값은 다음과 같습니다. 값 이름 의미

ssjune.tistory.com

[pywin32/win32process] - 14. [pywin32] SetProcess... 관련 함수

 

14. [pywin32] SetProcess... 관련 함수

1. SetPriorityClass(handle, dwPriorityClass) 프로세스의 우선순위 클래스를 설정하는 함수입니다. 인자로는 handle : PyHANDLE, dwPriorityClass : int 가 있습니다. handle: 프로세스의 핸들값입니다. dwPrior..

ssjune.tistory.com

 

반응형

댓글()