Click here to Skip to main content
15,880,608 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
While investigating the new lockdown of the Microsoft Security Essentials Service controller I discovered while using the console application ‘SC” that the command “sc sdshow MsMpSvc” returns a SID for the service of S-1-5-80-685333868-2237257676-1431965530-1907094206-2438021966. Using a conversion tool I built using code found online it converted to the username of "NT SERVICE\MsMpSvc".
I started wondering if I could build an app that enumerates the services to get the names of the services and then gets the SID for each service. As I found out 1 out of 171 services installed on my system does not map from a Domain\Username to SID and that is the “AdobeARMservice”. That service returns a “System.Security.Principal.IdentityNotMappedException” but that is currently the only one that does.

What I was thinking was If I could do a check like “If svcname(“NT SERVICE\AdobeARMservice”).exist then” do whatever, but there is no function I can find that is that simple and I’m not sure how to write it or if this Idea would even work.

The problem is in a lack of error handling in the Microsoft “Translate” function, it throws the error then you’re done. I can't come up with a way to handle the error then continue.

The function listed below works as is as a workaround but I would like to do a better implantation but don’t have a clue how.
Any Ideas are appreciated. And thank you for your time.

VB
Private Function convertServiceNameToSID(ByVal name As String)
    Dim op As String

    Dim svcname As String = name
    If svcname = "NT SERVICE\AdobeARMservice" Then
        Return "not supported"
    Else
        Dim f As New Principal.NTAccount(svcname)

        Dim s As Principal.SecurityIdentifier

        s = DirectCast(f.Translate(GetType(Principal.SecurityIdentifier)), Principal.SecurityIdentifier)
        Dim sidString As String = s.ToString()
        op = sidString
    End If

    Return op
End Function
Posted

1 solution

Wrap your s = DirectCast(f.Translate...) line in a Try/Catch block. When Translate throws, your Catch block will execute where you can return any string you want to the caller.

Really, it sounds as though you need to go through a beginners book on VB.NET. Exception handling is a basic skill.
 
Share this answer
 
v2
Comments
ledtech3 3-Dec-12 12:10pm    
I tired that but I guess I was to broad on what I had inside of the try catch
I have a half a dozen VB.net 2005 books and none help with that problem.
I know it was a easy fix but I just couldn't think of it at 2 am and get it to work.
Thanks for your help. Works great.
Dave Kreskowiak 3-Dec-12 14:30pm    
Google for "VB.NET Exception Handling". Some broader search terms would have resulted in better hits.
ledtech3 3-Dec-12 20:47pm    
Thanks,
Maybe I should have gotten some sleep and tried it again in the morning. : s
But maybe this will help someone else.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900