10 "lnktool <Create|Dump|RemoveDatablock> <LnkFile> [Options]\n"
14 "/Path <TargetPath>\n"
15 "/Icon <Path,Index>\n"
16 "/Arguments <String>\n"
17 "/RelativePath <LnkPath>\n"
18 "/WorkingDir <Path>\n"
21 "/SpecialFolderOffset <CSIDL> <Offset|-Count>\n"
22 "/AddExp <TargetPath>\n"
23 "/AddExpIcon <Path>\n"
26 "/RemoveSLDF <Flag>\n";
38#define PT_DESKTOP_REGITEM 0x1F
39#define PT_COMPUTER_REGITEM 0x2E
41#define PT_FS_UNICODE_FLAG 0x04
56 { 0x00000800,
"LOGO3ID" },
63 { 0x00040000,
"FORCE_NO_LINKTRACK" },
64 { 0x00080000,
"ENABLE_TARGET_METADATA" },
65 { 0x00100000,
"DISABLE_LINK_PATH_TRACKING" },
66 { 0x00200000,
"DISABLE_KNOWNFOLDER_RELATIVE_TRACKING" },
67 { 0x00400000,
"NO_KF_ALIAS" },
68 { 0x00800000,
"ALLOW_LINK_TO_LINK" },
69 { 0x01000000,
"UNALIAS_ON_SAVE" },
70 { 0x02000000,
"PREFER_ENVIRONMENT_PATH" },
71 { 0x04000000,
"KEEP_LOCAL_IDLIST_FOR_UNC_TARGET" },
72 { 0x08000000,
"PERSIST_VOLUME_ID_RELATIVE" },
81 { 0xA0000009,
"PROPERTYSTORAGE" },
120#define GetSLDF(Name) MapToNumber((Name), g_SLDF)
121#define GetDatablockSignature(Name) MapToNumber((Name), g_DBSig)
149 return pStrm->
Seek(
Pos, Origin, pNewPos);
159 return ILLFS(pStrm, ppidl);
185 if ((pidl = pidlDup = pidlChild =
ILClone(pidl)) ==
NULL)
190 pidlChild = pidlNext;
192 pidlChild->mkid.cb = 0;
201 if (Unicode && Unicode >=
Min)
215template<
class V,
class T>
237 if (!pidl || !pidl->mkid.cb)
238 wprintf(
L"[Desktop (%hs)]", pidl ?
"Empty" :
"NULL");
243 GUIDPIDL *pidlGUID = (GUIDPIDL*)pidl;
262 else if (
i == 1 &&
cb ==
sizeof(DRIVE) &&
folder == 0x20)
264 DRIVE *
p = (DRIVE*)pidl;
271 wprintf(wide ?
L"[%.2X %ub \"%.256ls\"]" :
L"[%.2X %ub \"%.256hs\"]",
p->Type,
cb,
p->Name);
275 wprintf(
L"[%.2X %ub ?]", pidl->mkid.abID[0],
cb);
321 (*ppLink)->Release();
335#define FreeBlock SHFree
350 return Seek(pStream, Remain);
410 if (
SUCCEEDED(
hr = IStream_Read(pStream, &slh,
sizeof(slh))))
412 #define DUMPSLH(name, fmt, field) wprintf(L"%hs=" fmt L"\n", (name), (slh).field)
416 DUMPSLH(
"Size",
L"%u", nFileSizeLow);
417 DUMPSLH(
"IconIndex",
L"%d", nIconIndex);
418 DUMPSLH(
"ShowCommand",
L"%d", nShowCommand);
419 DUMPSLH(
"HotKey",
L"%#.4x", wHotKey);
439 if (
p->cbVolumeIDOffset)
488 void *pFirstMember = ((
EXP_SZ_LINK*)pDBH)->szTarget;
499 wprintf(
L" %hs\n",
"SZ_ICON/LOGO3");
509 wprintf(
L" %hs\n",
"NT_CONSOLE_PROPS");
510 NT_CONSOLE_PROPS *
p = (NT_CONSOLE_PROPS*)pDBH;
511 wprintf(
L"%hsInsert=%d Quick=%d %ls\n",
INDENT,
p->bInsertMode,
p->bQuickEdit,
p->FaceName);
517 wprintf(
L"%hsCSIDL=%#x Offset=%#x\n",
INDENT,
p->idSpecialFolder,
p->cbOffset);
539 wprintf(
L" %hs\n", SigName ? SigName :
"SHIM");
549 wprintf(SigName ?
L" %hs\n" :
L"\n", SigName);
565 if (
SUCCEEDED(hr2 = pSL->GetIDList(&pidl)))
567 Dump(pidl,
"GetIDList:");
572 wprintf(
L"%hs: %#x\n",
"GetIDList", hr2);
579 wprintf(
L"GetPath(%#.2x): %ls\n", GetPathFlags[
i],
buf);
581 wprintf(
L"GetPath(%#.2x): %#x\n", GetPathFlags[
i], hr2);
585 wprintf(
L"%hs: %ls\n",
"GetWorkingDirectory",
buf);
587 wprintf(
L"%hs: %#x\n",
"GetWorkingDirectory", hr2);
592 wprintf(
L"%hs: %#x\n",
"GetArguments", hr2);
597 wprintf(
L"%hs: %#x\n",
"GetDescription", hr2);
599 int index = 123456789;
603 wprintf(
L"%hs: %#x\n",
"GetIconLocation", hr2);
613 wprintf(
L"%hs: %#x %#.4x\n",
"EI:GetIconLocation", hr2,
flags);
621#define RemoveSLDF(pSL, Flag) RemoveDatablock((pSL), 0, (Flag))
622#define AddSLDF(pSL, Flag) RemoveDatablock((pSL), 0, 0, (Flag))
671 UINT TargetCount = 0, DumpResult = 0, ForceAddSLDF = 0, ForceRemoveSLDF = 0;
764 ForceAddSLDF |=
Flag;
773 ForceRemoveSLDF |=
Flag;
787 wprintf(
L"%hsUnable to parse \"%ls\"!\n",
"Error: ",
argv[
i]);
795 if (
SUCCEEDED(
hr =
Save(pSL, LnkPath)) && (ForceAddSLDF | ForceRemoveSLDF))
801 if (
SUCCEEDED(IStream_Read(pStream, &slh,
sizeof(slh))))
805 IStream_Write(pStream, &slh,
sizeof(slh));
PRTL_UNICODE_STRING_BUFFER Path
xD9 x84 xD8 xAD xD9 x80 xF0 x90 xAC x9A xE0 xA7 xA6 xE0 xA7 xAA xF0 x91 x84 xA4 xF0 x91 x84 x89 xF0 x91 x84 x9B xF0 x90 x8A xAB xF0 x90 x8B x89 xE2 xB2 x9E xE2 xB2 x9F xD0 xBE xD0 x9E xF0 x90 x90 x84 xF0 x90 x90 xAC xE1 x83 x98 xE1 x83 x94 xE1 x83 x90 xE1 xB2 xBF xE2 xB0 x95 xE2 xB1 x85 xCE xBF xCE x9F xE0 xA8 xA0 xE0 xA8 xB0 xE0 xA9 xA6 Kayah xEA xA4 x8D xEA xA4 x80 Khmer xE1 xA7 xA1 xE1 xA7 xAA xE0 xBB x90 Latin Subscript Fallback
BOOL Move(DWORD dwLen, PBYTE &pData, DWORD &dwSize)
static void AddFlag(BOARD *p_board, unsigned col, unsigned row)
_Inout_ PVCB _In_ BOOLEAN Force
#define ERROR_INVALID_PARAMETER
#define GetProcAddress(x, y)
#define WideCharToMultiByte
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryA(LPCSTR lpLibFileName)
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
INT WINAPI StringFromGUID2(REFGUID id, LPOLESTR str, INT cmax)
HRESULT WINAPI DECLSPEC_HOTPATCH OleInitialize(LPVOID reserved)
void WINAPI DECLSPEC_HOTPATCH OleUninitialize(void)
static const WCHAR Signature[]
void WINAPI SHFree(LPVOID pv)
LPVOID WINAPI SHAlloc(SIZE_T len)
HRESULT WINAPI SHReadDataBlockList(IStream *lpStream, LPDBLIST *lppList)
VOID WINAPI SHFreeDataBlockList(LPDBLIST lpList)
HRESULT WINAPI IStream_Reset(IStream *lpStream)
HRESULT WINAPI SHCreateStreamOnFileW(LPCWSTR lpszPath, DWORD dwMode, IStream **lppStream)
int WINAPI StrCmpIW(LPCWSTR lpszStr, LPCWSTR lpszComp)
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
static void *static void *static LPDIRECTPLAY IUnknown * pUnk
GLuint GLuint GLsizei GLenum type
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLenum GLuint GLenum GLsizei const GLchar * buf
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
_Check_return_ long __cdecl wcstol(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, _In_ int _Radix)
_Check_return_ unsigned long __cdecl wcstoul(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, _In_ int _Radix)
HRESULT Save([in, unique] LPCOLESTR pszFileName, [in] BOOL fRemember)
HRESULT Load([in, unique] IStream *pStm)
HRESULT RemoveDataBlock([in] DWORD dwSig)
HRESULT GetFlags([out] DWORD *pdwFlags)
HRESULT AddDataBlock([in] void *pDataBlock)
HRESULT SetFlags([in] DWORD dwFlags)
HRESULT SetArguments([in] LPCWSTR pszArgs)
HRESULT SetIDList([in] PCIDLIST_ABSOLUTE pidl)
HRESULT SetPath([in] LPCWSTR pszFile)
HRESULT SetIconLocation([in] LPCWSTR pszIconPath, [in] int iIcon)
HRESULT SetShowCmd([in] int iShowCmd)
HRESULT SetDescription([in] LPCWSTR pszName)
HRESULT SetRelativePath([in] LPCWSTR pszPathRel, [in] DWORD dwReserved)
HRESULT SetWorkingDirectory([in] LPCWSTR pszDir)
HRESULT GetIDList([out] PIDLIST_ABSOLUTE *ppidl)
HRESULT Seek([in] LARGE_INTEGER dlibMove, [in] DWORD dwOrigin, [out] ULARGE_INTEGER *plibNewPosition)
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
nsresult QueryInterface(nsIIDRef riid, void **result)
#define ERROR_FILE_NOT_FOUND
PSDBQUERYRESULT_VISTA PVOID * ppData
static DWORD DWORD void LPSTR DWORD cch
static HMODULE MODULEINFO DWORD cb
#define STGM_SHARE_DENY_NONE
#define STGM_SHARE_DENY_WRITE
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
void WINAPI ILFree(LPITEMIDLIST pidl)
LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl)
DWORD_PTR WINAPI SHGetFileInfoW(LPCWSTR path, DWORD dwFileAttributes, SHFILEINFOW *psfi, UINT sizeofpsfi, UINT flags)
#define SHGFI_DISPLAYNAME
HRESULT WINAPI SHILCreateFromPath(_In_ PCWSTR, _Outptr_ PIDLIST_ABSOLUTE *, _Inout_opt_ DWORD *)
#define EXP_DARWIN_ID_SIG
@ SLDF_RUN_WITH_SHIMLAYER
#define EXP_SPECIAL_FOLDER_SIG
#define NT_CONSOLE_PROPS_SIG
PIDLIST_ABSOLUTE WINAPI SHSimpleIDListFromPath(PCWSTR)
#define PathParseIconLocation
ITEMIDLIST UNALIGNED * LPITEMIDLIST
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
DataBlockEnum(LPDATABLOCK_HEADER pHead)
WCHAR szwTarget[MAX_PATH]
WCHAR szDisplayName[MAX_PATH]
#define FIELD_OFFSET(t, f)
#define SLI_VALID_NETWORK
struct tagSHELL_LINK_INFOW SHELL_LINK_INFOW
#define EXP_VISTA_ID_LIST_SIG
#define EXP_KNOWN_FOLDER_SIG
#define SLI_CNR_VALID_DEVICE
_Must_inspect_result_ _In_ WDFOBJECT _In_ CONST GUID * Guid
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
#define FORMAT_MESSAGE_IGNORE_INSERTS
#define FORMAT_MESSAGE_FROM_SYSTEM
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
#define HRESULT_FROM_WIN32(x)
_Must_inspect_result_ _In_ ULONG Flags
_In_opt_ PALLOCATE_FUNCTION _In_opt_ PFREE_FUNCTION _In_ ULONG _In_ SIZE_T _In_ ULONG _In_ USHORT Depth
_In_ __drv_aliasesMem PSTRING Prefix
#define IID_PPV_ARG(Itype, ppType)