After recalling same Function get GetLastError = 1008
Hi,
i have some Code, that gives me a GetlastError()=1008.
"1008 An attempt was made to reference a token that does not exist."
The interesting thing is, that the first call to the function does work as
expected,
but the second does not and throws this exception. Sometimes it even makes
the application fail and crushes it. Behaves really "Exceptional"... :-(
What the Code does:
It starts a cmd.exe with parameters "chkdsk.exe" and if
"this->m_StartWithOutputRedirection" is set to TRUE
then it redirects the Output to a file with the ">" Operator. I only get the
1008 when the cmd.exe is startet with the output redirection to some file.
Then the first call works fine and the second fails with 1008. Why?
I dont know why this happens, but maybe someone can help me. Here is the
"misbehaving" code (error handling will be done in higher level!)section:
VOID CCheckDiskShellDlg::CreateChkDskProcess(CString sCMD, CString
sCommandLine,BOOL bWithOutputRedirection)
{
PROCESS_INFORMATION pi;
STARTUPINFO si;
SECURITY_ATTRIBUTES sa;
CString sFullCommand;
CString sCurrentTime;
CTime cCurrentTime;
TCHAR lpszDesktopPath[MAX_PATH];
LPTSTR lpszCommand;
ZeroMemory(&lpszDesktopPath[0],MAX_PATH);
if(!SUCCEEDED(SHGetSpecialFolderPath(this->m_hWnd,
lpszDesktopPath,
CSIDL_DESKTOPDIRECTORY,
FALSE))){
GetCurrentDirectory(MAX_PATH,lpszDesktopPath);
}
strcat(lpszDesktopPath,"\\");
cCurrentTime = CTime::GetCurrentTime();
sCurrentTime = cCurrentTime.Format(_T("Started: %H:%M:%S"));
CString sTimeForLogFile = cCurrentTime.Format(_T("%d_%m_%y_%H_%M_%S"));
ZeroMemory(&sa,sizeof(sa));
sa.nLength = sizeof(sa);
ZeroMemory(&si,sizeof(si));
si.cb = sizeof(si);
sFullCommand = sCMD + " " + sCommandLine;
lpszCommand = new TCHAR[sFullCommand.GetLength()+1];
if(this->m_StartWithOutputRedirection == TRUE){
sFullCommand += " > \"";
sFullCommand += lpszDesktopPath;
sFullCommand += "chkdsk result ";
sFullCommand += sTimeForLogFile + ".txt";
sFullCommand += "\"";
}
//return;
_tcscpy(lpszCommand,sFullCommand);
si.lpTitle = lpszCommand;
this->m_CheckedDrivesList.InsertString(-1,"Drive: " + sCommandLine + ", " +
sCurrentTime);
this->m_ClearListButton.EnableWindow(TRUE);
this->m_SaveToFile.EnableWindow(TRUE);
CreateProcess(NULL,
lpszCommand,
NULL,
NULL,
FALSE,
CREATE_DEFAULT_ERROR_MODE,
NULL,
NULL,
&si,
&pi);
Sleep(1000);
if(this->m_StartConsolesAsTopmostWindows == TRUE){
this->SetThreadWindowToTopmost(pi.dwProcessId);
}
}
Thanks in advance,...
Best regards
Kerem G?mr?kc?