iis 7 - CreateProcessAsUser in user session (other than 0) from service (IIS 7) -


my setting is:

  • windows server 2008, iis 7

what accomplish:

  • iis 7 receives request website 3d operations (in wpf) , in end iis 7 should render image , store somewhere on disk loaded website

what know , have tested yet:

  • iis 7 runs service in session 0 on windows server 2008
  • no service in session 0 has access video driver, no service in session 0 can perform rendering tasks (explained here: session 0 isolation)
  • microsoft proposes in paper create process in user session (by createprocessasuser) perform rendering sucessfully.

what achieved until now:

  • logonuser works well
  • createprocessasuser works well

the (but important) part doesn't work: when logon username , password , create process user, process still in session 0 , therefore rendering fails. user logged on (i checked it). according microsoft must possible create process in user session (not session 0).

  • how can create process user in other session 0?
  • do have create new session myself or this?

thank you!

my code:

        process_information processinfo = new process_information();         startupinfo startinfo = new startupinfo();         boolean bresult = false;         intptr htoken = intptr.zero;         uint32 uiresultwait = wait_failed;         int processcreationflags;          try         {             // logon user             bresult = win32.logonuser(                 strname,                 strdomain,                 strpassword,                 win32.logontype.logon32_logon_batch,                 win32.logonprovider.logon32_provider_default,                 out htoken             );             if (!bresult) { throw new exception("logon error #" + marshal.getlastwin32error()); }              checkprivileges(htoken);              // create process             startinfo.cb = marshal.sizeof(startinfo);             startinfo.lpdesktop = null;             startinfo.dwflags = convert.toint32(startf.startf_useshowwindow);             startinfo.wshowwindow = convert.toint16(showwindow.sw_hide);             processcreationflags = convert.toint32(createprocessflags.create_breakaway_from_job);               retstr += "command line: " + strcommand + environment.newline;             bresult = win32.createprocessasuser(                 htoken,                 null, //application name                 strcommand, //command line                 intptr.zero, //process attributes                 intptr.zero, //thread attributes                 false, //inherit handles                 processcreationflags, //process creation flags                 intptr.zero, //environment                 curdir, //current directory                 ref startinfo,                  out processinfo             );             if (!bresult) { throw new exception("createprocessasuser error #" + marshal.getlastwin32error()); }              // wait process end             uiresultwait = waitforsingleobject(processinfo.hprocess, infinite);             if (uiresultwait == wait_failed) { throw new exception("waitforsingleobject error #" + marshal.getlastwin32error()); }         }                 {             // close handles             closehandle(htoken);             closehandle(processinfo.hprocess);             closehandle(processinfo.hthread);         } 

i'm not expert in field, did searching around , seems cannot change session level, rather should have user auto-logon enabled , communicate process running under user.

this seemed useful: windows 2008 renderfarm service: createprocessasuser "session 0 isolation" , opengl


Comments

Popular posts from this blog

c# - SVN Error : "svnadmin: E205000: Too many arguments" -

c++ - Using OpenSSL in a multi-threaded application -

All overlapping substrings matching a java regex -