После интерактивного входа в Windows подключенные сетевые диски с сохраненными учетными данными автоматически подключаются. Если в удаленной сети используется другой пользователь, эти учетные данные извлекаются из диспетчера учетных данных Windows как «Учетные данные Windows».
Я пытаюсь добиться того же в процессе, созданном командой CreateProcessWithLogon
. В этом случае можно идентифицировать запомненные связи по WNetOpenEnum
с областью действия RESOURCE_REMEMBERED
. По WNetGetConnection
можно понять, какие из этих ресурсов не подключены.
Команда WNetAddConnection2W
позволяет осуществить это соединение. Можно использовать пользователя и пароль по умолчанию, чтобы можно было подключить подключенные к ним сетевые диски. Их также можно предоставить в виде строк, но похоже, что нет возможности заставить эту команду читать учетные данные из диспетчера учетных данных Windows, даже несмотря на то, что существуют флаги для их хранения.
Поэтому я попытался сделать это с помощью CredEnumerate
или CredRead
, которые могут получить учетные данные, но полученное CREDENTIALW.CredentialBlobSize
равно 0, а CredentialBlob
равно NULL.
Поскольку WNetAddConnection2W
содержит флаги для хранения введенных учетных данных в диспетчере учетных данных, кажется логичным, что вы также можете их использовать. Но мне не удалось понять, как это сделать.
Я надеюсь, что кто-нибудь может дать мне совет, как решить эту проблему.
🤔 А знаете ли вы, что...
Язык C++ имеет возможность работы с файлами и потоками данных.
Тем временем я понял, что учетные данные домена не могут быть получены по замыслу, их можно только записать: https://learn.microsoft.com/en-us/windows/win32/secauthn/kinds-of-credentials
Поэтому невозможно достичь того, что я пытался.