Changeset 1153 for trunk/eraser6


Ignore:
Timestamp:
7/1/2009 11:31:34 AM (5 years ago)
Author:
lowjoel
Message:

If while executing a command-line call we get an Unauthorised access exception, return ERROR_ACCESS_DENIED to the calling process. In the case of the shell extension, this will re-spawn the process with administrator privileges. Implements #216.

Location:
trunk/eraser6
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/eraser6/Eraser/Program.cs

    r1137 r1153  
    9393 
    9494                return 0; 
     95            } 
     96            catch (UnauthorizedAccessException) 
     97            { 
     98                return 5; //ERROR_ACCESS_DENIED 
    9599            } 
    96100            catch (Win32Exception e) 
  • trunk/eraser6/ShellExt/CtxMenu.cpp

    r1148 r1153  
    846846            DWORD exitCode = 0; 
    847847             
    848             if (GetExitCodeProcess(processInfo.hProcess, &exitCode) && exitCode) 
    849             { 
    850                 char buffer[8192]; 
    851                 DWORD lastRead = 0; 
    852                 std::wstring output; 
    853  
    854                 while (ReadFile(readPipe, buffer, sizeof(buffer), &lastRead, NULL) && lastRead != 0) 
     848            if (GetExitCodeProcess(processInfo.hProcess, &exitCode)) 
     849                if (exitCode == ERROR_ACCESS_DENIED) 
    855850                { 
    856                     size_t lastConvert = 0; 
    857                     wchar_t wBuffer[8192]; 
    858                     if (!mbstowcs_s(&lastConvert, wBuffer, sizeof(wBuffer) / sizeof(wBuffer[0]), 
    859                         buffer, lastRead)) 
     851                    //The spawned instance could not connect with the master instance 
     852                    //because it is running as an administrator. Spawn the new instance 
     853                    //again, this time as an administrator 
     854                    RunEraser(action, parameters, true, parent, show); 
     855                } 
     856                else if (exitCode) 
     857                { 
     858                    char buffer[8192]; 
     859                    DWORD lastRead = 0; 
     860                    std::wstring output; 
     861 
     862                    while (ReadFile(readPipe, buffer, sizeof(buffer), &lastRead, NULL) && lastRead != 0) 
    860863                    { 
    861                         output += std::wstring(wBuffer, lastConvert); 
     864                        size_t lastConvert = 0; 
     865                        wchar_t wBuffer[8192]; 
     866                        if (!mbstowcs_s(&lastConvert, wBuffer, sizeof(wBuffer) / sizeof(wBuffer[0]), 
     867                            buffer, lastRead)) 
     868                        { 
     869                            output += std::wstring(wBuffer, lastConvert); 
     870                        } 
    862871                    } 
     872 
     873                    //Show the error message. 
     874                    throw output; 
    863875                } 
    864  
    865                 //Show the error message. 
    866                 throw output; 
    867             } 
    868876        } 
    869877    } 
Note: See TracChangeset for help on using the changeset viewer.