psdk中的的代码编译不能通过忘高手解答

tyguaike 2005-10-30 10:47:24
//源码
#define UNICODE
#define _WIN32_WINNT 0x0500

#include <windows.h>
#include <stdio.h>
#include <userenv.h>

void DisplayError(LPWSTR pszAPI)
{
LPVOID lpvMessageBuffer;

FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM,
NULL, GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPWSTR)&lpvMessageBuffer, 0, NULL);

//
//... now display this string
//
wprintf(L"ERROR: API = %s.\n", pszAPI);
wprintf(L" error code = %d.\n", GetLastError());
wprintf(L" message = %s.\n", (LPWSTR)lpvMessageBuffer);

//
// Free the buffer allocated by the system
//
LocalFree(lpvMessageBuffer);

ExitProcess(GetLastError());
}

void wmain(int argc, WCHAR *argv[])
{
DWORD dwSize;
HANDLE hToken;
LPVOID lpvEnv;
PROCESS_INFORMATION pi = {0};
STARTUPINFO si = {0};
WCHAR szUserProfile[256] = L"";

si.cb = sizeof(STARTUPINFO);

if (argc != 4)
{
wprintf(L"Usage: %s [user@domain] [password] [cmd]", argv[0]);
wprintf(L"\n\n");
return;
}

//
// TO DO: change NULL to '.' to use local account database
//
if (!LogonUser(argv[1], NULL, argv[2], LOGON32_LOGON_INTERACTIVE,
LOGON32_PROVIDER_DEFAULT, &hToken))
DisplayError(L"LogonUser");

if (!CreateEnvironmentBlock(&lpvEnv, hToken, TRUE))
DisplayError(L"CreateEnvironmentBlock");

dwSize = sizeof(szUserProfile)/sizeof(WCHAR);

if (!GetUserProfileDirectory(hToken, szUserProfile, &dwSize))
DisplayError(L"GetUserProfileDirectory");

//
// TO DO: change NULL to '.' to use local account database
//
if (!CreateProcessWithLogonW(argv[1], NULL, argv[2],
LOGON_WITH_PROFILE, NULL, argv[3],
CREATE_UNICODE_ENVIRONMENT, lpvEnv, szUserProfile,
&si, &pi))
DisplayError(L"CreateProcessWithLogonW");

if (!DestroyEnvironmentBlock(lpvEnv))
DisplayError(L"DestroyEnvironmentBlock");

CloseHandle(hToken);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
/*
已安装PSDK最新开发包,
1,在VC6.0中已设置头文件,库还有可执行文件路径
但在编译时出现下载的错误提示:
--------------------Configuration: logo - Win32 Debug--------------------
Linking...
logo.obj : error LNK2001: unresolved external symbol __imp__DestroyEnvironmentBlock@4
logo.obj : error LNK2001: unresolved external symbol __imp__GetUserProfileDirectoryW@12
logo.obj : error LNK2001: unresolved external symbol __imp__CreateEnvironmentBlock@12
Debug/logo.exe : fatal error LNK1120: 3 unresolved externals
执行 link.exe 时出错.

logo.exe - 1 error(s), 0 warning(s)

*/
...全文
188 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
菜牛 2005-10-31
  • 打赏
  • 举报
回复
能够自己找到办法最好。
tyguaike 2005-10-31
  • 打赏
  • 举报
回复
MACKZ兄你好,谢谢你的提点。我以已经弄通了。
tyguaike 2005-10-31
  • 打赏
  • 举报
回复
Mackz兄你好,我是电脑维护的不是专业的开发人员,但是在我管理的网吧时需要用到以其它用户身份来运行游戏但是又不用客户自输入密码所以才想写一个简单的程式来用。
由于runas需要输密码不合适我的工作。

刚好我在MSDN上找到这个但是编译出错我又找不到解决的方法,所以才上来发贴希望你能帮忙解决。
谢谢
tyguaike 2005-10-30
  • 打赏
  • 举报
回复
Library Link to Advapi32.lib.

DLL Requires Advapi32.dll.
嗯,有这个,请问要怎么用呢?
对不起我对一些高级的编译方式不是很了解。
菜牛 2005-10-30
  • 打赏
  • 举报
回复
注意看下面:

Requirements
Client Requires Windows "Longhorn", Windows XP, or Windows 2000 Professional.
Server Requires Windows Server "Longhorn", Windows Server 2003, or Windows 2000 Server.
Header Declared in Winbase.h; include Windows.h.

Library Link to Advapi32.lib.

DLL Requires Advapi32.dll.
chehw 2005-10-30
  • 打赏
  • 举报
回复
#define UNICODE
#define _WIN32_WINNT 0x0500

#pragma comment(lib, "Userenv.lib") //加上这一行就可以了

#include <windows.h>
tyguaike 2005-10-30
  • 打赏
  • 举报
回复
这里是MSDN上的代码
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/createprocesswithlogonw.asp

16,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧