In my answer to the Superuser.com question List of Hidden / Virtual Windows User Accounts
I am saying:
Even these lists don't give you every possible account. For example, you can create an application pool FooBarPool then delete it again, you can still use IIS APPPOOL\FooBarPool in the permissions dialog, so there must be an internal list somewhere.
I'm talking about accounts that can be used to set NTFS and other object permissions for.
In this post I'm going to answer the question where the orphaned accounts are stored.
If you create a new IIS Application Pool
FooBarPool nothing really happens, but as soon as you run the AppPool for the first time by hitting a site using the pool a new virtual account
IIS APPPOOL\FooBarPool is created with an SID of
You can see that SID in the Process Explorer properties for the
This SID is always the same for all AppPools with the name
FooBarPool on any computer.
IIS APPPOOL\* accounts have the prefix
S-1-5-82- and the rest is a SHA-1 hash of then string
This account is saved in the registry under:
which lists all accounts used on the local machine and is normally not accessible even to administrators, but you can use:
psexec -s -i regedit.exe
to look at that key.
Now deleting the AppPool
FooBarPool doesn't delete the account created for it. Creating a new AppPool with the same name will use the existing account.
So when using:
icacls.exe C:\test /grant "IIS APPPOOL\FooBarPool:(OI)(CI)(M)"
The OS hashes the name to get the SID for that acount and finds it in the registry, even though the AppPool no longer exists.
So can we find out all the Application Pool names that these accounts were created for? I don't think so, only the SID is stored, and while it is easy to get the SID from the name of the pool, it should be impossible to get the name from the SID, because it is a one-way-hash.