first commit

This commit is contained in:
Ayxan
2022-05-23 00:16:32 +04:00
commit d660f2a4ca
24786 changed files with 4428337 additions and 0 deletions

View File

@@ -0,0 +1,78 @@
"""
Demonstrates prompting for credentials, saving, and loggging on with marshalled credential.
Also shows how to load user's profile
"""
import win32net, win32security, win32api, win32con
import win32profile, win32cred
## Prompt for a username/pwd for local computer
uiinfo = {
"MessageText": "Enter credentials for local machine",
"CaptionText": "win32cred_demo.py",
}
target, pwd, save = win32cred.CredUIPromptForCredentials(
TargetName=win32api.GetComputerName(),
AuthError=0,
Flags=win32cred.CREDUI_FLAGS_DO_NOT_PERSIST
| win32cred.CREDUI_FLAGS_SHOW_SAVE_CHECK_BOX,
Save=False,
UiInfo=uiinfo,
)
attrs = [
{"Keyword": "attr1", "Flags": 0, "Value": "unicode data"},
{"Keyword": "attr2", "Flags": 0, "Value": b"character data"},
]
cred = {
"Comment": "Created by win32cred_demo.py",
"UserName": target,
"TargetAlias": None,
"TargetName": target,
"CredentialBlob": pwd,
"Flags": win32cred.CRED_FLAGS_USERNAME_TARGET,
"Persist": win32cred.CRED_PERSIST_ENTERPRISE,
"Type": win32cred.CRED_TYPE_DOMAIN_PASSWORD,
"Attributes": attrs,
}
win32cred.CredWrite(cred)
pwd = None
print(win32cred.CredRead(target, win32cred.CRED_TYPE_DOMAIN_PASSWORD))
## Marshal saved credential and use it to log on
mc = win32cred.CredMarshalCredential(win32cred.UsernameTargetCredential, target)
# As of pywin32 301 this no longer works for markh and unclear when it stopped, or
# even if it ever did! # Fails in Python 2.7 too, so not a 3.x regression.
try:
th = win32security.LogonUser(
mc,
None,
"",
win32con.LOGON32_LOGON_INTERACTIVE,
win32con.LOGON32_PROVIDER_DEFAULT,
)
win32security.ImpersonateLoggedOnUser(th)
print("GetUserName:", win32api.GetUserName())
win32security.RevertToSelf()
## Load user's profile. (first check if user has a roaming profile)
username, domain = win32cred.CredUIParseUserName(target)
user_info_4 = win32net.NetUserGetInfo(None, username, 4)
profilepath = user_info_4["profile"]
## LoadUserProfile apparently doesn't like an empty string
if not profilepath:
profilepath = None
## leave Flags in since 2.3 still chokes on some types of optional keyword args
hk = win32profile.LoadUserProfile(
th, {"UserName": username, "Flags": 0, "ProfilePath": profilepath}
)
## Get user's environment variables in a form that can be passed to win32process.CreateProcessAsUser
env = win32profile.CreateEnvironmentBlock(th, False)
## Cleanup should probably be in a finally block
win32profile.UnloadUserProfile(th, hk)
th.Close()
except win32security.error as exc:
print("Failed to login for some reason", exc)