Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
'handlename' işlem bilgileri tutamacını sızıntıya neden oluyor
Açıklamalar
Bu uyarı, CreateProcess işlev ailesi tarafından döndürülen işlem bilgileri tanıtıcılarının CloseHandle kullanılarak kapatılması gerektiğini gösterir. Bunun yapılmaması, tutamaç sızıntılarına neden olur.
Kod analizi adı: LEAKING_PROCESS_HANDLE
Örnek
Aşağıdaki kod bu uyarıyı oluşturur:
#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 );
}
Bu uyarıyı düzeltmek için, aşağıdaki kodda gösterildiği gibi iş parçacığı tutamacını kapatma çağrısı CloseHandle( pi.hThread ) yapın:
#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 );
}
Daha fazla bilgi için bkz . CreateProcess İşlevi ve CloseHandle İşlevi.