다음을 통해 공유


경고 C6335

프로세스 정보 유출 핸들 'handlename'

설명

이 경고는 CreateProcess 함수 패밀리에서 반환하는 프로세스 정보 핸들을 CloseHandle을 사용하여 닫아야 했음을 나타냅니다. 이렇게 하지 않으면 핸들 누수가 발생합니다.

코드 분석 이름: LEAKING_PROCESS_HANDLE

예시

다음 코드는 이 경고를 생성합니다.

#include <windows.h>
#include <stdio.h>

void f( )
{
    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);
    ZeroMemory( &pi, sizeof(pi) );

    // Start the child process.
    if( !CreateProcess( "C:\\WINDOWS\\system32\\calc.exe",
                        NULL,
                        NULL,
                        NULL,
                        FALSE,
                        0,
                        NULL,
                        NULL,
                        &si,    // Pointer to STARTUPINFO structure.
                        &pi ) ) // Pointer to PROCESS_INFORMATION
  {
    puts("Error");
    return;
  }
  // Wait until child process exits.
  WaitForSingleObject( pi.hProcess, INFINITE );
  CloseHandle( pi.hProcess );
}

이 경고를 CloseHandle (pi.``hThread) 수정하려면 다음 코드와 같이 스레드 핸들을 닫습니다.

#include <windows.h>
#include <stdio.h>

void f( )
{
    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);
    ZeroMemory( &pi, sizeof(pi) );

    // Start the child process.
    if( !CreateProcess( "C:\\WINDOWS\\system32\\calc.exe",
                        NULL,
                        NULL,
                        NULL,
                        FALSE,
                        0,
                        NULL,
                        NULL,
                        &si,    // Pointer to STARTUPINFO structure.
                        &pi ) ) // Pointer to PROCESS_INFORMATION
    {
      puts("Error");
      return;
    }

    // Wait until child process exits.
    WaitForSingleObject( pi.hProcess, INFINITE );
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );
}

자세한 내용은 CreateProcess 함수CloseHandle 함수를 참조하세요.