Hello @Isaac Burns ,
Thanks for the detailed write-up. Based on what you describe, I'd lean toward this not being a build or registration failure, but there are two things worth ruling out first.
The first is that the sample tile may actually be there, just not selected by default. In CSampleProvider::GetCredentialCount() the sample returns CREDENTIAL_PROVIDER_NO_DEFAULT and autoLogon = FALSE, so its tile isn't auto-shown. Windows keeps the last user's tile, and the sample only appears once you click "Other user" / switch user. Since it looks like a normal password field, it's easy to miss.
The second is that the missing CoCreateInstance in your trace may just be a tracing-scope artifact. LogonUI.exe runs on the secure desktop (a different desktop/session), so a capture started from your interactive session usually won't see its COM activity. I wouldn't treat "no CoCreateInstance" as conclusive. A boot/global WPR trace tends to capture that path better.
To narrow down the cause, you can try reproducing what LogonUI does from a normal app like the example below. This separates "is the COM object healthy?" from "is it being shown?":
#include <windows.h>
#include <credentialprovider.h>
#include <stdio.h>
// {5fd3d285-0dd9-4362-8855-e0abaacd4af6} : must match guid.h / register.reg
static const CLSID CLSID_CSample =
{ 0x5fd3d285,0x0dd9,0x4362,{0x88,0x55,0xe0,0xab,0xaa,0xcd,0x4a,0xf6} };
int wmain() {
CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED);
ICredentialProvider* p = nullptr;
HRESULT hr = CoCreateInstance(CLSID_CSample, nullptr,
CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&p));
wprintf(L"CoCreateInstance hr=0x%08X\n", hr);
if (SUCCEEDED(hr)) {
DWORD count = 0, def = 0; BOOL autoLogon = FALSE;
p->SetUsageScenario(CPUS_LOGON, 0);
p->GetCredentialCount(&count, &def, &autoLogon);
wprintf(L"count=%lu default=0x%08X\n", count, def);
p->Release();
}
CoUninitialize();
return 0;
}
The returned HRESULT should narrow it down fairly quickly. If it's 0x00000000 (S_OK), the DLL is fine, and you can focus on clicking "Other user" after a sign-out/reboot, treating the trace as a scoping issue. If it's 0x8007007E (ERROR_MOD_NOT_FOUND), that points to a missing dependency and most likely a Debug/CRT build; switching to a static CRT (C/C++ -> Code Generation -> Runtime Library -> /MT) removes the VC++ redist dependency. If it's 0x80040154 (REGDB_E_CLASSNOTREG), that's a CLSID mismatch between guid.h and register.reg worth re-checking.
References:
If you can share the HRESULT and whether the tile shows under "Other user", I'm happy to dig further. If you found my response helpful or informative, I would greatly appreciate it if you could follow this guide for your confirmation.
Thank you.