Udostępnij za pośrednictwem


C6335

warning C6335: leaking process information handle <handlename>

This warning indicates that the process information handles returned by the CreateProcess family of functions need to be closed using CloseHandle. Failure to do so will cause handle leaks.

Example

The following code generates this warning:

#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 );
}

To correct this warning, call CloseHandle (pi.hThread) to close thread handle as shown in the following code:

#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 );
}

See Also

Other Resources

CreateProcess

CloseHandle