Я пытаюсь установить исполняемый файл для запуска как локального пользователя с низким уровнем привилегий (отличного от текущего зарегистрированного пользователя) по умолчанию. Эта команда Windows «runas/savecred/user: username appname.exe» может сделать это, но она требует, чтобы текущий зарегистрированный пользователь вручную вводил пароль другого пользователя в первый раз. В идеале я хочу, чтобы установщик программы установил учетные данные, поэтому для текущего входа в систему не требуется никакого взаимодействия. (Я не хочу, чтобы программа была как служба Windows по другим причинам.)C++: Как программно создать учетные данные локального пользователя в Windows Credential Manager, чтобы «runas/savecred» мог его использовать?
Когда я запустил команду «runas», я заметил, что новый новый «интерактивный вход в систему» Windows Credential был создан в диспетчере учетных данных , где «Интернет или сетевой адрес» был установлен как «$ computer_name \ $ username (Interactive Logon)», «User name» был установлен как «$ computer_name \ $ username», «password» был отображен как «***** *** "и" Persistence "был установлен как« Предприятие ».
Основываясь на этом наблюдении, я нашел API Win32, CredWrite, но у меня возникли проблемы с его работой. Я получил код ошибки 87 (ERROR_INVALID_PARAMETER - параметр неверный.), Когда был вызван CredWrite.
#include <windows.h>
#include <wincred.h>
#include <tchar.h>
void main()
{
char* password = "randompassword";
DWORD blobsize= 1 + strlen(password);
CREDENTIAL cred = {0};
cred.Flags = CRED_FLAGS_USERNAME_TARGET;
cred.Type = CRED_TYPE_DOMAIN_PASSWORD;
cred.TargetName = L"computername\\username";
cred.CredentialBlobSize = blobsize;
cred.CredentialBlob = (LPBYTE) password;
cred.Persist = CRED_PERSIST_LOCAL_MACHINE;
cred.UserName = L"computername\\username";
if (!CredWrite(&cred, 0))
{
std::cerr << GetLastError() << std::endl;
}
}
Ссылки, которые я смотрел, перечислены внизу. Мне удалось создать учетную запись типа CRED_TYPE_GENERIC, но она не была распознана RUNAS. Я действительно озадачен тем, как устанавливать поля типа TargetName и Type, чтобы программно создавать учетные данные интерактивного входа в систему, как это делает RUNAS. Официальная документация MSDN не ясна и примеров нет.
CredWrite: https://msdn.microsoft.com/en-us/library/windows/desktop/aa375187(v=vs.85).aspx CREDENTIAL: https://msdn.microsoft.com/en-us/library/windows/desktop/aa374788(v=vs.85).aspx Пример кода для создания CRED_TYPE_GENERIC типа учетных данных: How do I store and retrieve credentials from the Windows Vault credential manager?
см этот адрес http://stackoverflow.com/questions/3729406/create-local-user-account – Proxytype
Спасибо за ответ, Proxytype.I не было проблем, чтобы создать локальную низкоприоритетную учетную запись в NetUserAdd. – Batistuta
выглядит так: некоторые поля не могут быть изменены в существующих учетных данных. Эта ошибка возвращается, если поле не соответствует значению в защищенном поле существующих учетных данных. - вы не можете изменить параметр после создания пользователя, это значит, что вам нужно установить его при создании пользователя. https://msdn.microsoft.com/en-us/library/windows/desktop/aa375187(v= vs.85) .aspx – Proxytype