CreateProcess는 lpEnvironment 매개 변수의 환경 블록에서 중복된 변수를 제거하지 않습니다.
- 아티클
- 2023. 07. 17.
이 문서의 내용
애플리케이션은 환경 블록을 해당 매개 변수로 lpEnvironment 호출 CreateProcess 하고 전달합니다.
동일한 변수에 대해 두 개의 정의가 있지만 해당 블록에 다른 값이 있는 경우 자식 프로세스는 변수를 쿼리할 때 블록에서 설정한 마지막 값을 가져올 것으로 예상할 수 있습니다. 대신 Windows는 첫 번째 값을 반환합니다.
원래 제품 버전: Windows Server 2008
원래 KB 번호: 2505238
원인
이 동작은 Windows에서 의도적으로 수행됩니다.
CreateProcess 함수
현재 디자인에서는 CreateProcess 매개 변수로 lpEnvironment 전달하는 버퍼에서 중복된 변수를 제거하지 않습니다. 해당 버퍼를 새 프로세스의 환경 블록으로 설정하기만 하면 됩니다.
매개 변수에 대한 lpEnvironment 자세한 내용은 CreateProcess 함수를 참조하세요.
환경 변수
자식 프로세스가 만들어지고 해당 환경 변수에 액세스하려는 경우 API를 GetEnvironmentVariable 사용할 GetEnvironmentStrings 수 있습니다.
- GetEnvironmentStrings 는 전달한 버퍼와 동일한 프로세스의 환경 블록 버퍼에 대한 포인터를 반환합니다 CreateProcess.
- GetEnvironmentVariable 는 간단한 알고리즘을 사용하여 전달한 CreateProcess 버퍼 내에서 원하는 변수를 찾습니다. 이 변수는 왼쪽에서 오른쪽으로 버퍼를 이동하고 원하는 변수 이름을 찾으면 해당 값을 반환합니다. GetEnvironmentVariable 는 버퍼에 이름이 같은 다른 변수가 있으면 상관없습니다.
요약하자면, 현재 디자인에서는 환경 블록 버퍼에서 중복된 변수를 제거하기 위해 호출 CreateProcess 하는 것은 애플리케이션의 책임입니다.
'[Microsoft]' 카테고리의 다른 글
GetTickCount는 약 776일 후에 0으로 다시 설정됩니다. (0) | 2023.11.03 |
---|---|
파일이 FILE_SHARE_WRITE 사용하여 잠겨 있는 경우 파일 복사 작업이 파일 콘텐츠를 삭제합니다. (0) | 2023.11.03 |
핵심 OS 프로세스에 대한 추가 기능 구성 요소 지침 (0) | 2023.11.03 |
Windows에서 비동기 디스크 I/O가 동기로 표시됨 (0) | 2023.11.03 |
데스크톱 Win32 앱 개발자를 위한 Windows 10 새로운 기능 (0) | 2023.11.03 |