I'll preface this the same way I do all VB code posts, I'm a C# programer, so I may have some details about what needs to be done in VB, wrong.
I'm not sure about this part in VB, but before each "With InfPermission" you may want to set it equal to a new object, or else it may change the permission for the previous permissions. I've had this happen with a few things in C#, so I do it all the time. Not positive if that will happen in VB, but it is something I have to do, so just suggesting it.
Does the page you are trying to make get made? Just lacking the proper permissions?
One thing I see that never directly happens, and I don't know if it happens in the AddTab section. You never ADD the tabpermissions to the system. you add it to the collection and set the collection in the Tab permissions, though I'm not positive if that will work. I think I had trouble with that doing nothing when I tried it.
Here's my suggestion of what to try:
Create the tab
Fill the TabPermission object after setting it to a new TabPermission object
(Here's the 'missing' part)Use the TabPermissionController to AddTabPermission.
Then use DataCache.ClearTabsCache(PortalId) and DataCache.ClearTabPermissionsCache(PortalId) to refresh the permissions for instant effect.
I think that series of actions will do what you need. I haven't dealt with programatically creating tabs, so get the tab to create, and from there I have successfully added and removed permissions (role and individual) to tabs.
I hope that helps