---
name: "liblnk"
section: "3"
platform: "linux"
package: "liblnk-dev"
version: "20240423-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/liblnk"
---

# liblnk(3)

Library to access the Windows Shortcut File (LNK) format

## NAME

**liblnk.h** – Library to access the Windows Shortcut File (LNK) format

## SYNOPSIS

**#include \<liblnk.h\>**

Support functions

*const* *char* *\**\

**liblnk\_get\_version**(*void*);

*int*\

**liblnk\_get\_access\_flags\_read**(*void*);

*int*\

**liblnk\_get\_codepage**(*int \*codepage*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_set\_codepage**(*int codepage*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_check\_file\_signature**(*const char \*filename*, *liblnk\_error\_t \*\*error*);

Available when compiled with wide character string support:

*int*\

**liblnk\_check\_file\_signature\_wide**(*const wchar\_t \*filename*, *liblnk\_error\_t \*\*error*);

Available when compiled with libbfio support:

*int*\

**liblnk\_check\_file\_signature\_file\_io\_handle**(*libbfio\_handle\_t \*file\_io\_handle*, *liblnk\_error\_t \*\*error*);

Notify functions

*void*\

**liblnk\_notify\_set\_verbose**(*int verbose*);

*int*\

**liblnk\_notify\_set\_stream**(*FILE \*stream*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_notify\_stream\_open**(*const char \*filename*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_notify\_stream\_close**(*liblnk\_error\_t \*\*error*);

Error functions

*void*\

**liblnk\_error\_free**(*liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_error\_fprint**(*liblnk\_error\_t \*error*, *FILE \*stream*);

*int*\

**liblnk\_error\_sprint**(*liblnk\_error\_t \*error*, *char \*string*, *size\_t size*);

*int*\

**liblnk\_error\_backtrace\_fprint**(*liblnk\_error\_t \*error*, *FILE \*stream*);

*int*\

**liblnk\_error\_backtrace\_sprint**(*liblnk\_error\_t \*error*, *char \*string*, *size\_t size*);

File functions

*int*\

**liblnk\_file\_initialize**(*liblnk\_file\_t \*\*file*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_free**(*liblnk\_file\_t \*\*file*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_signal\_abort**(*liblnk\_file\_t \*file*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_open**(*liblnk\_file\_t \*file*, *const char \*filename*, *int access\_flags*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_close**(*liblnk\_file\_t \*file*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_ascii\_codepage**(*liblnk\_file\_t \*file*, *int \*ascii\_codepage*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_set\_ascii\_codepage**(*liblnk\_file\_t \*file*, *int ascii\_codepage*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_is\_corrupted**(*liblnk\_file\_t \*file*, *liblnk\_error\_t \*\*error*);

Available when compiled with wide character string support:

*int*\

**liblnk\_file\_open\_wide**(*liblnk\_file\_t \*file*, *const wchar\_t \*filename*, *int access\_flags*, *liblnk\_error\_t \*\*error*);

Available when compiled with libbfio support:

*int*\

**liblnk\_file\_open\_file\_io\_handle**(*liblnk\_file\_t \*file*, *libbfio\_handle\_t \*file\_io\_handle*, *int access\_flags*, *liblnk\_error\_t \*\*error*);

Link information functions

*int*\

**liblnk\_file\_get\_data\_flags**(*liblnk\_file\_t \*file*, *uint32\_t \*data\_flags*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_data\_size**(*liblnk\_file\_t \*file*, *size64\_t \*data\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_link\_refers\_to\_file**(*liblnk\_file\_t \*file*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_file\_creation\_time**(*liblnk\_file\_t \*file*, *uint64\_t \*filetime*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_file\_modification\_time**(*liblnk\_file\_t \*file*, *uint64\_t \*filetime*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_file\_access\_time**(*liblnk\_file\_t \*file*, *uint64\_t \*filetime*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_file\_size**(*liblnk\_file\_t \*file*, *uint32\_t \*file\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_icon\_index**(*liblnk\_file\_t \*file*, *uint32\_t \*icon\_index*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_show\_window\_value**(*liblnk\_file\_t \*file*, *uint32\_t \*show\_window\_value*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_hot\_key\_value**(*liblnk\_file\_t \*file*, *uint16\_t \*hot\_key\_value*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_file\_attribute\_flags**(*liblnk\_file\_t \*file*, *uint32\_t \*file\_attribute\_flags*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_drive\_type**(*liblnk\_file\_t \*file*, *uint32\_t \*drive\_type*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_drive\_serial\_number**(*liblnk\_file\_t \*file*, *uint32\_t \*drive\_serial\_number*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_utf8\_volume\_label\_size**(*liblnk\_file\_t \*file*, *size\_t \*utf8\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_utf8\_volume\_label**(*liblnk\_file\_t \*file*, *uint8\_t \*utf8\_string*, *size\_t utf8\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_utf16\_volume\_label\_size**(*liblnk\_file\_t \*file*, *size\_t \*utf16\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_utf16\_volume\_label**(*liblnk\_file\_t \*file*, *uint16\_t \*utf16\_string*, *size\_t utf16\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_utf8\_local\_path\_size**(*liblnk\_file\_t \*file*, *size\_t \*utf8\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_utf8\_local\_path**(*liblnk\_file\_t \*file*, *uint8\_t \*utf8\_string*, *size\_t utf8\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_utf16\_local\_path\_size**(*liblnk\_file\_t \*file*, *size\_t \*utf16\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_utf16\_local\_path**(*liblnk\_file\_t \*file*, *uint16\_t \*utf16\_string*, *size\_t utf16\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_utf8\_network\_path\_size**(*liblnk\_file\_t \*file*, *size\_t \*utf8\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_utf8\_network\_path**(*liblnk\_file\_t \*file*, *uint8\_t \*utf8\_string*, *size\_t utf8\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_utf16\_network\_path\_size**(*liblnk\_file\_t \*file*, *size\_t \*utf16\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_utf16\_network\_path**(*liblnk\_file\_t \*file*, *uint16\_t \*utf16\_string*, *size\_t utf16\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_utf8\_description\_size**(*liblnk\_file\_t \*file*, *size\_t \*utf8\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_utf8\_description**(*liblnk\_file\_t \*file*, *uint8\_t \*utf8\_string*, *size\_t utf8\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_utf16\_description\_size**(*liblnk\_file\_t \*file*, *size\_t \*utf16\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_utf16\_description**(*liblnk\_file\_t \*file*, *uint16\_t \*utf16\_string*, *size\_t utf16\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_utf8\_relative\_path\_size**(*liblnk\_file\_t \*file*, *size\_t \*utf8\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_utf8\_relative\_path**(*liblnk\_file\_t \*file*, *uint8\_t \*utf8\_string*, *size\_t utf8\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_utf16\_relative\_path\_size**(*liblnk\_file\_t \*file*, *size\_t \*utf16\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_utf16\_relative\_path**(*liblnk\_file\_t \*file*, *uint16\_t \*utf16\_string*, *size\_t utf16\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_utf8\_working\_directory\_size**(*liblnk\_file\_t \*file*, *size\_t \*utf8\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_utf8\_working\_directory**(*liblnk\_file\_t \*file*, *uint8\_t \*utf8\_string*, *size\_t utf8\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_utf16\_working\_directory\_size**(*liblnk\_file\_t \*file*, *size\_t \*utf16\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_utf16\_working\_directory**(*liblnk\_file\_t \*file*, *uint16\_t \*utf16\_string*, *size\_t utf16\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_utf8\_command\_line\_arguments\_size**(*liblnk\_file\_t \*file*, *size\_t \*utf8\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_utf8\_command\_line\_arguments**(*liblnk\_file\_t \*file*, *uint8\_t \*utf8\_string*, *size\_t utf8\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_utf16\_command\_line\_arguments\_size**(*liblnk\_file\_t \*file*, *size\_t \*utf16\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_utf16\_command\_line\_arguments**(*liblnk\_file\_t \*file*, *uint16\_t \*utf16\_string*, *size\_t utf16\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_utf8\_icon\_location\_size**(*liblnk\_file\_t \*file*, *size\_t \*utf8\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_utf8\_icon\_location**(*liblnk\_file\_t \*file*, *uint8\_t \*utf8\_string*, *size\_t utf8\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_utf16\_icon\_location\_size**(*liblnk\_file\_t \*file*, *size\_t \*utf16\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_utf16\_icon\_location**(*liblnk\_file\_t \*file*, *uint16\_t \*utf16\_string*, *size\_t utf16\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_link\_target\_identifier\_data\_size**(*liblnk\_file\_t \*file*, *size\_t \*data\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_copy\_link\_target\_identifier\_data**(*liblnk\_file\_t \*file*, *uint8\_t \*data*, *size\_t data\_size*, *liblnk\_error\_t \*\*error*);

Distributed link tracking data functions

*int*\

**liblnk\_file\_has\_distributed\_link\_tracking\_data**(*liblnk\_file\_t \*file*, *liblnk\_error\_t \*\*error*);

Extra data block functions

*int*\

**liblnk\_file\_get\_number\_of\_data\_blocks**(*liblnk\_file\_t \*file*, *int \*number\_of\_data\_blocks*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_file\_get\_data\_block\_by\_index**(*liblnk\_file\_t \*file*, *int data\_block\_index*, *liblnk\_data\_block\_t \*\*data\_block*, *liblnk\_error\_t \*\*error*);

Data block functions

*int*\

**liblnk\_data\_block\_free**(*liblnk\_data\_block\_t \*\*data\_block*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_data\_block\_get\_signature**(*liblnk\_data\_block\_t \*data\_block*, *uint32\_t \*signature*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_data\_block\_get\_data\_size**(*liblnk\_data\_block\_t \*data\_block*, *size\_t \*data\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_data\_block\_copy\_data**(*liblnk\_data\_block\_t \*data\_block*, *uint8\_t \*data*, *size\_t data\_size*, *liblnk\_error\_t \*\*error*);

Strings data block functions

*int*\

**liblnk\_strings\_data\_block\_get\_utf8\_string\_size**(*liblnk\_data\_block\_t \*data\_block*, *size\_t \*utf8\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_strings\_data\_block\_get\_utf8\_string**(*liblnk\_data\_block\_t \*data\_block*, *uint8\_t \*utf8\_string*, *size\_t utf8\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_strings\_data\_block\_get\_utf16\_string\_size**(*liblnk\_data\_block\_t \*data\_block*, *size\_t \*utf16\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_strings\_data\_block\_get\_utf16\_string**(*liblnk\_data\_block\_t \*data\_block*, *uint16\_t \*utf16\_string*, *size\_t utf16\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_strings\_data\_block\_get\_utf8\_path\_string\_size**(*liblnk\_data\_block\_t \*data\_block*, *size\_t \*utf8\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_strings\_data\_block\_get\_utf8\_path\_string**(*liblnk\_data\_block\_t \*data\_block*, *uint8\_t \*utf8\_string*, *size\_t utf8\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_strings\_data\_block\_get\_utf16\_path\_string\_size**(*liblnk\_data\_block\_t \*data\_block*, *size\_t \*utf16\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_strings\_data\_block\_get\_utf16\_path\_string**(*liblnk\_data\_block\_t \*data\_block*, *uint16\_t \*utf16\_string*, *size\_t utf16\_string\_size*, *liblnk\_error\_t \*\*error*);

Distributed link tracking data block functions

*int*\

**liblnk\_distributed\_link\_tracking\_data\_block\_get\_utf8\_machine\_identifier\_size**(*liblnk\_data\_block\_t \*data\_block*, *size\_t \*utf8\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_distributed\_link\_tracking\_data\_block\_get\_utf8\_machine\_identifier**(*liblnk\_data\_block\_t \*data\_block*, *uint8\_t \*utf8\_string*, *size\_t utf8\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_distributed\_link\_tracking\_data\_block\_get\_utf16\_machine\_identifier\_size**(*liblnk\_data\_block\_t \*data\_block*, *size\_t \*utf16\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_distributed\_link\_tracking\_data\_block\_get\_utf16\_machine\_identifier**(*liblnk\_data\_block\_t \*data\_block*, *uint16\_t \*utf16\_string*, *size\_t utf16\_string\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_distributed\_link\_tracking\_data\_block\_get\_droid\_volume\_identifier**(*liblnk\_data\_block\_t \*data\_block*, *uint8\_t \*guid\_data*, *size\_t guid\_data\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_distributed\_link\_tracking\_data\_block\_get\_droid\_file\_identifier**(*liblnk\_data\_block\_t \*data\_block*, *uint8\_t \*guid\_data*, *size\_t guid\_data\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_distributed\_link\_tracking\_data\_block\_get\_birth\_droid\_volume\_identifier**(*liblnk\_data\_block\_t \*data\_block*, *uint8\_t \*guid\_data*, *size\_t guid\_data\_size*, *liblnk\_error\_t \*\*error*);

*int*\

**liblnk\_distributed\_link\_tracking\_data\_block\_get\_birth\_droid\_file\_identifier**(*liblnk\_data\_block\_t \*data\_block*, *uint8\_t \*guid\_data*, *size\_t guid\_data\_size*, *liblnk\_error\_t \*\*error*);

## DESCRIPTION

The **liblnk\_get\_version**() function is used to retrieve the library version.

## RETURN VALUES

Most of the functions return NULL or -1 on error, dependent on the return type. For the actual return values see "liblnk.h".

## ENVIRONMENT

None

## FILES

None

## NOTES

liblnk can be compiled with wide character support (wchar\_t).

To compile liblnk with wide character support use: *./configure* *--enable-wide-character-type=yes*\
  or define: *\_UNICODE*\
  or *UNICODE*\
  during compilation.

*LIBLNK\_WIDE\_CHARACTER\_TYPE*\
  in liblnk/features.h can be used to determine if liblnk was compiled with wide character support.

## BUGS

Please report bugs of any kind on the project issue tracker: https://github.com/libyal/liblnk/issues

## AUTHOR

These man pages are generated from "liblnk.h".

## COPYRIGHT

Copyright (C) 2009-2024, Joachim Metz \<joachim.metz@gmail.com\>.

This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

## SEE ALSO

the liblnk.h include file
