自己解決できました。
いろいろ試して、こちらで動作するのを確認しました。
閲覧してくださった方々、回答いただけた dodox86様ありがとうございました。
これで質問を終了することにいたします。
Imports System, System.Runtime.InteropServices
''' <summary>
''' フォルダのアイコン表示を変更するクラス
''' </summary>
''' <remarks>
''' Windows 10 pro 64bitで動作を確認
''' </remarks>
Public Class ClassSetFolderIcon
'【使い方】
'Dim clsIcon As New ClassSetFolderIcon
'Dim targetFolder As String = "c:\wk"
'Dim iconFilePath As String = "100.ico" ' c:\wk\100.ico があるものとします
'Dim InfoTip As String = "フォルダアイコン変更のサンプルクラス"
'clsIcon.SetIcon(targetFolder, iconFilePath, InfoTip)
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)>
Public Structure LPSHFOLDERCUSTOMSETTINGS
Public dwSize As UInt32
Public dwMask As UInt32
Public pvid As IntPtr
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=256)> Public pszWebViewTemplate As String
Public cchWebViewTemplate As UInt32
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=256)> Public pszWebViewTemplateVersion As String
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=256)> Public pszInfoTip As String
Public cchInfoTip As UInt32
Public pclsid As IntPtr
Public dwFlags As UInt32
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=256)> Public pszIconFile As String
Public cchIconFile As UInt32
Public iIconIndex As Integer
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=256)> Public pszLogo As String
Public cchLogo As UInt32
End Structure
Private Declare Function SHGetSetFolderCustomSettings Lib "Shell32.dll" (ByRef pfcs As LPSHFOLDERCUSTOMSETTINGS, ByVal pszPath As String, ByVal dwReadWrite As UInt32) As UInt32
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As String, ByVal lpFileName As String) As Integer
Private Declare Function PathMakeSystemFolder Lib "shlwapi.dll" Alias "PathMakeSystemFolderA" (ByVal pszPath As String) As Long
''' <summary>
''' 指定されたフォルダのアイコンを変更します
''' </summary>
''' <param name="targetFolder">アイコンを変更したいフォルダパス(例. c:wk)</param>
''' <param name="iconFilePath">アイコンパス絶対パス(c:\wk\100.ico) or targetFolderからの相対パス(100.ico)</param>
''' <param name="InfoTip">フォルダのTips表示文字列</param>
''' <remarks></remarks>
Public Sub SetIcon(ByVal targetFolder As String, ByVal iconFilePath As String, ByVal InfoTip As String)
Dim ss As String = InfoTip
Dim ca As String = ".ShellClassInfo"
Dim pszPath As String = targetFolder & "\Desktop.ini"
WritePrivateProfileString(ca, "InfoTip", ss, targetFolder & "\Desktop.ini")
WritePrivateProfileString(ca, "IconFile", iconFilePath, targetFolder & "\Desktop.ini")
WritePrivateProfileString(ca, "IconIndex", "0", targetFolder & "\Desktop.ini")
WritePrivateProfileString(ca, "IconResource", iconFilePath & ",0", targetFolder & "\Desktop.ini")
Dim finfo As System.IO.FileInfo = New System.IO.FileInfo(pszPath)
finfo.Attributes = (System.IO.FileAttributes.System Or System.IO.FileAttributes.Hidden)
PathMakeSystemFolder(targetFolder)
Dim FCS_WRITE As UInt32 = 3 ' FCS_READ=1 | FCS_FORCEWRITE=2
Dim FolderSettings As New LPSHFOLDERCUSTOMSETTINGS
FolderSettings.dwMask = &H10
Dim HRESULT As UInt32 = SHGetSetFolderCustomSettings(FolderSettings, pszPath, FCS_WRITE)
End Sub
End Class