我们目前正在使用由位于Firebird数据库中的用户定义函数启动的报表打印应用程序,该数据库作为服务运行。
UDF由一个简单的DLL组成,该DLL启动报告应用程序并通过“CreateProcessAsUser”API传递要打印的报告ID。
详细说明,我们冒充特定的Windows帐户才能访问用户的打印机。 运行软件的计算机从不参加。实际上没有人在其上开会。
所以这就是我们如何做到的:
LogonUser( sUser, nil, sPass, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, hToken );
...
LoadUserProfile(hToken, ProfileInfo);
...
ImpersonateLoggedOnUser(hToken);
...
StartupInfo.lpDesktop := Pchar('Winsta0\Default');
CreateProcessAsUser(hToken,nil, Pchar(sCommand), nil, nil, False, 0, nil, nil, StartupInfo,
ProcessInfo);
...
UnloadUserProfile(hToken,ProfileInfo.hProfile);
现在我们已经转移到Windows 7平台,显然,它不再起作用了。
即使用户未登录,是否仍可以模拟用户帐户并使用windows vista / 7下的服务使用他的打印机? (否则我将使用用户当前活动的会话ID)
感谢您的帮助