smourier/VCamSample

unable to run

lyris85 opened this issue · 7 comments

Screenshot 2024-04-14 132610

I tried on 2 different computer and it does the same problem. I registred the .dll with regsvr32 VCamSampleSource.dll as administrator

I just tried on a Windows 11 Sandbox (https://learn.microsoft.com/en-us/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-overview) and on a brand new Windows 11 VM from the ISO here https://www.microsoft.com/en-us/software-download/windows11 and it works fine.

So I guess it's related to your security settings or more generally how your machine is configured, but I'm unsure what's exactly the problem. There are multiple processes that needs access:

  • VCamSample.exe
  • SvcHost.exe which runs two processes: the frame server and the frame server monitor like we can see here:

image

Access denied at that point is usually because these two services have a problem to run, or they can't access the registry of the binaries where the VCamSampleSource was registered.

Oh and ... maybe it's simply due the fact that you downloaded the binaries from the internet, not compiled them by yourself. So you must remove the Mark of the Web (https://en.wikipedia.org/wiki/Mark_of_the_Web) click on "Unblock" on the .zip file you downloaded and press OK:

image

I tried again using your recommandation in window sandox, same result: access denied.

Here is the config I used to build the project:
Screenshot 2024-04-15 073429
I tried all config ( x86 debug and release, x64 debug and release)

Here is the output build:
Screenshot 2024-04-15 074220

I have Windows 11 Pro version 23H2

Have you registered this new VCamSampleSource.dll output files?

Yes I did it lik
Untitled
e this:

It works fine (downloaded or rebuilt) in a brand new VM with these specs:

image

Security issues can arise from many causes and Windows 11 Virtual Cam involves at least 3 different processes that all need registry (read) access. Difficult to say w/o being able to reproduce.

You can try to use procmon https://learn.microsoft.com/en-us/sysinternals/downloads/procmon to check access denieds (on files and/or registry keys), and/or build both binaries in Debug and check the traces the sample outputs, using what's described here https://github.com/smourier/VCamSample?tab=readme-ov-file#tracing

FYI information I was able to run the software downloaded from your repo. But building it doest work

Ok I think the problem is the Frame Server & Frame Server Monitor services (running as svchost.exe with special command lines) must load VCamSampleSource.dll in-process and they're running under different credentials (Local Service & Local System respectively), so they just get an access denied when they load this dll from where you compile, and this access denied is then propagated to VCamSample when it calls IMFVirtualCamera::Start.

image

I guess you compile in a directory under your compiling user's root, for example something like C:\Users\<your login>\source\repos\VCamSample\x64\Debug or somewhere restricted in some way.

It works with the version I built because I suppose you download it (and register it there) under a directory that's accessible by the two Frame Server services.

So the solution is just to copy VCamSampleSource.dll once built somewhere where everyone has access and register it from here (or build and register where everyone has access)