ReactOS 0.4.16-dev-1946-g52006dd
vista.c
Go to the documentation of this file.
1/*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS system libraries
4 * PURPOSE: Vista functions
5 * PROGRAMMER: Thomas Weidenmueller <w3seek@reactos.com>
6 */
7
8/* INCLUDES *******************************************************************/
9
10#include <k32_vista.h>
11
12#if _WIN32_WINNT != _WIN32_WINNT_VISTA
13#error "This file must be compiled with _WIN32_WINNT == _WIN32_WINNT_VISTA"
14#endif
15
16// This is defined only in ntifs.h
17#define REPARSE_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_DATA_BUFFER, GenericReparseBuffer)
18
19#define NDEBUG
20#include <debug.h>
21
22/* PUBLIC FUNCTIONS ***********************************************************/
23
24/*
25 * @implemented
26 */
27BOOL
34{
35 BOOL bRet = FALSE;
36 DWORD dwBufferSize;
39
41 {
43 return FALSE;
44 }
45
46 dwBufferSize = sizeof(UNICODE_STRING) + *lpdwSize * sizeof(WCHAR);
47 pBuffer = (PUNICODE_STRING)RtlAllocateHeap(RtlGetProcessHeap(), 0, dwBufferSize);
48 if (!pBuffer)
49 {
51 return FALSE;
52 }
53
56 pBuffer,
57 dwBufferSize,
58 NULL);
59 if (NT_SUCCESS(Status))
60 {
61 DWORD dwCch = pBuffer->Length / sizeof(WCHAR);
62 if (dwCch >= *lpdwSize)
63 {
65 }
66 else
67 {
68 RtlCopyMemory(lpExeName, pBuffer->Buffer, pBuffer->Length);
69 lpExeName[dwCch] = UNICODE_NULL;
70 *lpdwSize = dwCch;
71 bRet = TRUE;
72 }
73 }
74 else
75 {
79 }
80
81 RtlFreeHeap(RtlGetProcessHeap(), 0, pBuffer);
82 return bRet;
83}
84
85
86/*
87 * @implemented
88 */
89BOOL
96{
97 BOOL bRet = FALSE;
99 PWSTR pszFullName;
100
101 dwSize = *lpdwSize;
102 pszFullName = (PWSTR)RtlAllocateHeap(RtlGetProcessHeap(), 0, dwSize * sizeof(WCHAR));
103 if (!pszFullName)
104 {
106 return FALSE;
107 }
108
110 {
111 INT iCch;
114 pszFullName,
115 dwSize + 1,
116 lpExeName,
117 *lpdwSize,
118 NULL,
119 NULL);
120 if (iCch)
121 {
122 *lpdwSize = iCch - 1;
123 bRet = TRUE;
124 }
125 }
126
127 RtlFreeHeap(RtlGetProcessHeap(), 0, pszFullName);
128 return bRet;
129}
130
131
132/*
133 * @unimplemented
134 */
136WINAPI
138 OUT APPLICATION_RECOVERY_CALLBACK* pRecoveryCallback,
139 OUT PVOID* ppvParameter,
140 PDWORD dwPingInterval,
142{
144 return E_FAIL;
145}
146
147
148/*
149 * @unimplemented
150 */
152WINAPI
154 OUT PWSTR pwzCommandline OPTIONAL,
155 IN OUT PDWORD pcchSize,
156 OUT PDWORD pdwFlags OPTIONAL)
157{
159 return E_FAIL;
160}
161
162
163/*
164 * @unimplemented
165 */
166VOID
167WINAPI
169{
171}
172
173
174/*
175 * @unimplemented
176 */
178WINAPI
180{
182 return E_FAIL;
183}
184
185
186/*
187 * @unimplemented
188 */
190WINAPI
191RegisterApplicationRecoveryCallback(IN APPLICATION_RECOVERY_CALLBACK pRecoveryCallback,
192 IN PVOID pvParameter OPTIONAL,
193 DWORD dwPingInterval,
195{
197 return E_FAIL;
198}
199
200
201/*
202 * @unimplemented
203 */
205WINAPI
208{
210 return E_FAIL;
211}
212
213
214/*
215 * @implemented
216 */
218WINAPI
220 IN LPCWSTR lpTargetFileName,
222{
225 HANDLE hSymlink = NULL;
226 UNICODE_STRING SymlinkFileName = { 0, 0, NULL };
227 UNICODE_STRING TargetFileName = { 0, 0, NULL };
228 BOOLEAN bAllocatedTarget = FALSE, bRelativePath = FALSE;
229 LPWSTR lpTargetFullFileName = NULL;
230 SIZE_T cbPrintName;
231 SIZE_T cbReparseData;
232 PREPARSE_DATA_BUFFER pReparseData = NULL;
233 PBYTE pBufTail;
235 ULONG dwCreateOptions;
236 DWORD dwErr;
237
238 if(!lpSymlinkFileName || !lpTargetFileName || (dwFlags | SYMBOLIC_LINK_FLAG_DIRECTORY) != SYMBOLIC_LINK_FLAG_DIRECTORY)
239 {
241 return FALSE;
242 }
243
244 if(dwFlags & SYMBOLIC_LINK_FLAG_DIRECTORY)
245 dwCreateOptions = FILE_DIRECTORY_FILE;
246 else
247 dwCreateOptions = FILE_NON_DIRECTORY_FILE;
248
249 switch(RtlDetermineDosPathNameType_U(lpTargetFileName))
250 {
254 bRelativePath = TRUE;
255 RtlInitUnicodeString(&TargetFileName, lpTargetFileName);
256 break;
257
259 {
260 LPWSTR FilePart;
261 SIZE_T cchTargetFullFileName;
262
263 cchTargetFullFileName = GetFullPathNameW(lpTargetFileName, 0, NULL, &FilePart);
264
265 if(cchTargetFullFileName == 0)
266 {
268 goto Cleanup;
269 }
270
271 lpTargetFullFileName = RtlAllocateHeap(RtlGetProcessHeap(), 0, cchTargetFullFileName * sizeof(WCHAR));
272
273 if(lpTargetFullFileName == NULL)
274 {
276 goto Cleanup;
277 }
278
279 if(GetFullPathNameW(lpTargetFileName, cchTargetFullFileName, lpTargetFullFileName, &FilePart) == 0)
280 {
282 goto Cleanup;
283 }
284 }
285
286 lpTargetFileName = lpTargetFullFileName;
287
288 // fallthrough
289
294 default:
295 if(!RtlDosPathNameToNtPathName_U(lpTargetFileName, &TargetFileName, NULL, NULL))
296 {
297 bAllocatedTarget = TRUE;
299 goto Cleanup;
300 }
301 }
302
303 cbPrintName = wcslen(lpTargetFileName) * sizeof(WCHAR);
304 cbReparseData = FIELD_OFFSET(REPARSE_DATA_BUFFER, SymbolicLinkReparseBuffer.PathBuffer) + TargetFileName.Length + cbPrintName;
305 pReparseData = RtlAllocateHeap(RtlGetProcessHeap(), 0, cbReparseData);
306
307 if(pReparseData == NULL)
308 {
310 goto Cleanup;
311 }
312
313 pBufTail = (PBYTE)(pReparseData->SymbolicLinkReparseBuffer.PathBuffer);
314
315 pReparseData->ReparseTag = (ULONG)IO_REPARSE_TAG_SYMLINK;
316 pReparseData->ReparseDataLength = (USHORT)cbReparseData - REPARSE_DATA_BUFFER_HEADER_SIZE;
317 pReparseData->Reserved = 0;
318
319 pReparseData->SymbolicLinkReparseBuffer.SubstituteNameOffset = 0;
320 pReparseData->SymbolicLinkReparseBuffer.SubstituteNameLength = TargetFileName.Length;
321 pBufTail += pReparseData->SymbolicLinkReparseBuffer.SubstituteNameOffset;
322 RtlCopyMemory(pBufTail, TargetFileName.Buffer, TargetFileName.Length);
323
324 pReparseData->SymbolicLinkReparseBuffer.PrintNameOffset = pReparseData->SymbolicLinkReparseBuffer.SubstituteNameLength;
325 pReparseData->SymbolicLinkReparseBuffer.PrintNameLength = (USHORT)cbPrintName;
326 pBufTail += pReparseData->SymbolicLinkReparseBuffer.PrintNameOffset;
327 RtlCopyMemory(pBufTail, lpTargetFileName, cbPrintName);
328
329 pReparseData->SymbolicLinkReparseBuffer.Flags = 0;
330
331 if(bRelativePath)
332 pReparseData->SymbolicLinkReparseBuffer.Flags |= 1; // TODO! give this lone flag a name
333
334 if(!RtlDosPathNameToNtPathName_U(lpSymlinkFileName, &SymlinkFileName, NULL, NULL))
335 {
337 goto Cleanup;
338 }
339
341
343 (
344 &hSymlink,
348 NULL,
350 0,
353 NULL,
354 0
355 );
356
357 if(!NT_SUCCESS(Status))
358 {
360 goto Cleanup;
361 }
362
364 (
365 hSymlink,
366 NULL,
367 NULL,
368 NULL,
371 pReparseData,
372 cbReparseData,
373 NULL,
374 0
375 );
376
377 if(!NT_SUCCESS(Status))
378 {
380 DispInfo.DeleteFile = TRUE;
381 NtSetInformationFile(hSymlink, &IoStatusBlock, &DispInfo, sizeof(DispInfo), FileDispositionInformation);
382
384 goto Cleanup;
385 }
386
387 dwErr = NO_ERROR;
388
389Cleanup:
390 if(hSymlink)
391 NtClose(hSymlink);
392
393 RtlFreeUnicodeString(&SymlinkFileName);
394 if (bAllocatedTarget)
395 {
396 RtlFreeHeap(RtlGetProcessHeap(),
397 0,
398 TargetFileName.Buffer);
399 }
400
401 if(lpTargetFullFileName)
402 RtlFreeHeap(RtlGetProcessHeap(), 0, lpTargetFullFileName);
403
404 if(pReparseData)
405 RtlFreeHeap(RtlGetProcessHeap(), 0, pReparseData);
406
407 if(dwErr)
408 {
410 return FALSE;
411 }
412
413 return TRUE;
414}
415
416
417/*
418 * @implemented
419 */
421NTAPI
422CreateSymbolicLinkA(IN LPCSTR lpSymlinkFileName,
423 IN LPCSTR lpTargetFileName,
425{
426 PWCHAR SymlinkW, TargetW;
427 BOOLEAN Ret;
428
429 if(!lpSymlinkFileName || !lpTargetFileName)
430 {
432 return FALSE;
433 }
434
435 if (!(SymlinkW = FilenameA2W(lpSymlinkFileName, FALSE)))
436 return FALSE;
437
438 if (!(TargetW = FilenameA2W(lpTargetFileName, TRUE)))
439 return FALSE;
440
441 Ret = CreateSymbolicLinkW(SymlinkW,
442 TargetW,
443 dwFlags);
444
445 RtlFreeHeap(RtlGetProcessHeap(), 0, SymlinkW);
446 RtlFreeHeap(RtlGetProcessHeap(), 0, TargetW);
447
448 return Ret;
449}
450
451
452/*
453 * @implemented
454 */
455DWORD
456WINAPI
458 OUT LPSTR lpszFilePath,
459 IN DWORD cchFilePath,
461{
462 WCHAR FilePathW[MAX_PATH];
463 UNICODE_STRING FilePathU;
464 DWORD PrevLastError;
465 DWORD Ret = 0;
466
467 if (cchFilePath != 0 &&
468 cchFilePath > sizeof(FilePathW) / sizeof(FilePathW[0]))
469 {
470 FilePathU.Length = 0;
471 FilePathU.MaximumLength = (USHORT)cchFilePath * sizeof(WCHAR);
472 FilePathU.Buffer = RtlAllocateHeap(RtlGetProcessHeap(),
473 0,
474 FilePathU.MaximumLength);
475 if (FilePathU.Buffer == NULL)
476 {
478 return 0;
479 }
480 }
481 else
482 {
483 FilePathU.Length = 0;
484 FilePathU.MaximumLength = sizeof(FilePathW);
485 FilePathU.Buffer = FilePathW;
486 }
487
488 /* save the last error code */
489 PrevLastError = GetLastError();
491
492 /* call the unicode version that does all the work */
494 FilePathU.Buffer,
495 cchFilePath,
496 dwFlags);
497
499 {
500 /* no error, restore the last error code and convert the string */
501 SetLastError(PrevLastError);
502
503 Ret = FilenameU2A_FitOrFail(lpszFilePath,
504 cchFilePath,
505 &FilePathU);
506 }
507
508 /* free allocated memory if necessary */
509 if (FilePathU.Buffer != FilePathW)
510 {
511 RtlFreeHeap(RtlGetProcessHeap(),
512 0,
513 FilePathU.Buffer);
514 }
515
516 return Ret;
517}
518
519/*
520 * @unimplemented
521 */
522BOOL
523WINAPI
525 IN DWORD nPeriodMilliseconds,
526 IN DWORD nBytesPerPeriod,
527 IN BOOL bDiscardable,
528 OUT LPDWORD lpTransferSize,
529 OUT LPDWORD lpNumOutstandingRequests)
530{
532 return FALSE;
533}
534
535
536/*
537 * @unimplemented
538 */
539BOOL
540WINAPI
542 OUT LPDWORD lpPeriodMilliseconds,
543 OUT LPDWORD lpBytesPerPeriod,
544 OUT LPBOOL pDiscardable,
545 OUT LPDWORD lpTransferSize,
546 OUT LPDWORD lpNumOutstandingRequests)
547{
549 return FALSE;
550}
551
552
553/*
554 * @unimplemented
555 */
556HANDLE
557WINAPI
559 IN LPFILE_ID_DESCRIPTOR lpFileID,
560 IN DWORD dwDesiredAccess,
561 IN DWORD dwShareMode,
562 IN LPSECURITY_ATTRIBUTES lpSecurityAttributes OPTIONAL,
564{
567}
568
569
570
571/*
572 Vista+ MUI support functions
573
574 References:
575 Evolution of MUI Support across Windows Versions: https://learn.microsoft.com/en-us/windows/win32/intl/evolution-of-mui-support-across-windows-versions
576 Comparing Windows XP Professional Multilingual Options: https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-xp/bb457045(v=technet.10)?redirectedfrom=MSDN
577
578 More info:
579 https://web.archive.org/web/20170930153551/http://msdn.microsoft.com/en-us/goglobal/bb978454.aspx
580 https://learn.microsoft.com/en-us/windows/win32/intl/multilingual-user-interface-functions
581*/
582
583/* FUNCTIONS *****************************************************************/
584
585BOOL
586WINAPI
592{
595 return FALSE;
596}
597
598/*
599 * @unimplemented
600 */
601BOOL
602WINAPI
606 PWSTR pwszLanguage,
607 PULONG pcchLanguage,
608 PWSTR pwszFileMUIPath,
609 PULONG pcchFileMUIPath,
610 PULONGLONG pululEnumerator)
611{
612 DPRINT1("%x %p %p %p %p %p\n", dwFlags, pcwszFilePath, pwszLanguage, pwszFileMUIPath, pcchFileMUIPath, pululEnumerator);
614 return FALSE;
615}
616
617/*
618 * @unimplemented
619 */
620#if 0 // This is Windows 7+
621BOOL
622WINAPI
625 PULONG pulNumLanguages,
626 PZZWSTR pwszLanguagesBuffer,
627 PULONG pcchLanguagesBuffer)
628{
629 DPRINT1("%x %p %p %p\n", dwFlags, pulNumLanguages, pwszLanguagesBuffer, pcchLanguagesBuffer);
631 return FALSE;
632}
633#endif
634
635/*
636* @unimplemented
637*/
638BOOL
639WINAPI
642 PULONG pulNumLanguages,
643 PZZWSTR pwszLanguagesBuffer,
644 PULONG pcchLanguagesBuffer)
645{
646 DPRINT1("%x %p %p %p\n", dwFlags, pulNumLanguages, pwszLanguagesBuffer, pcchLanguagesBuffer);
648 return FALSE;
649}
650
651/*
652 * @unimplemented
653 */
654BOOL
655WINAPI
658 PULONG pulNumLanguages,
659 PZZWSTR pwszLanguagesBuffer,
660 PULONG pcchLanguagesBuffer)
661{
662 DPRINT1("%x %p %p %p\n", dwFlags, pulNumLanguages, pwszLanguagesBuffer, pcchLanguagesBuffer);
664 return FALSE;
665}
666
667/*
668 * @unimplemented
669 */
670LANGID
671WINAPI
673{
676 return 0;
677}
678
679/*
680 * @unimplemented
681 */
682BOOL
683WINAPI
686 PCZZWSTR pwmszLanguage,
687 PZZWSTR pwszFallbackLanguages,
688 PDWORD pcchFallbackLanguages,
689 PDWORD pdwAttributes)
690{
691 DPRINT1("%x %p %p %p %p\n", dwFlags, pwmszLanguage, pwszFallbackLanguages, pcchFallbackLanguages, pdwAttributes);
693 return FALSE;
694}
695
696
697/*
698 * @unimplemented
699 */
700BOOL
701WINAPI
704 PULONG pulNumLanguages,
705 PZZWSTR pwszLanguagesBuffer,
706 PULONG pcchLanguagesBuffer)
707{
708 DPRINT1("%x %p %p %p\n", dwFlags, pulNumLanguages, pwszLanguagesBuffer, pcchLanguagesBuffer);
710 return FALSE;
711}
712
713/*
714 * @unimplemented
715 */
716#if 0 // Tis is Windows 7+
717BOOL
718WINAPI
721 PCZZWSTR pwszLanguagesBuffer,
722 PULONG pulNumLanguages)
723{
724 DPRINT1("%x %p %p\n", dwFlags, pwszLanguagesBuffer, pulNumLanguages);
726 return FALSE;
727}
728#endif
729
730/*
731 * @unimplemented
732 */
733BOOL
734WINAPI
737 PCZZWSTR pwszLanguagesBuffer,
738 PULONG pulNumLanguages
739 )
740{
741 DPRINT1("%x %p %p\n", dwFlags, pwszLanguagesBuffer, pulNumLanguages);
743 return FALSE;
744}
745
unsigned char BOOLEAN
LONG NTSTATUS
Definition: precomp.h:26
#define FILE_DIRECTORY_FILE
Definition: constants.h:491
#define FILE_NON_DIRECTORY_FILE
Definition: constants.h:492
#define DPRINT1
Definition: precomp.h:8
DWORD dwErr
Definition: service.c:36
#define UNIMPLEMENTED
Definition: ntoskrnl.c:15
PVOID NTAPI RtlAllocateHeap(IN PVOID HeapHandle, IN ULONG Flags, IN SIZE_T Size)
Definition: heap.c:616
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
Definition: heap.c:634
@ ProcessImageFileName
Definition: cicbase.cpp:66
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
Definition: conport.c:36
#define STATUS_NO_MEMORY
Definition: d3dkmdt.h:51
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
#define NO_ERROR
Definition: dderror.h:5
#define E_FAIL
Definition: ddrawi.h:102
#define ERROR_SUCCESS
Definition: deptool.c:10
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
#define ERROR_CALL_NOT_IMPLEMENTED
Definition: compat.h:102
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
#define CP_ACP
Definition: compat.h:109
#define SetLastError(x)
Definition: compat.h:752
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
#define MAX_PATH
Definition: compat.h:34
#define FILE_ATTRIBUTE_NORMAL
Definition: compat.h:137
#define WideCharToMultiByte
Definition: compat.h:111
PWCHAR FilenameA2W(LPCSTR NameA, BOOL alloc)
Definition: fileutils.c:18
DWORD FilenameU2A_FitOrFail(LPSTR DestA, INT destLen, PUNICODE_STRING SourceU)
Definition: fileutils.c:56
DWORD WINAPI GetFullPathNameW(IN LPCWSTR lpFileName, IN DWORD nBufferLength, OUT LPWSTR lpBuffer, OUT LPWSTR *lpFilePart)
Definition: path.c:1106
DWORD WINAPI GetFinalPathNameByHandleW(_In_ HANDLE hFile, _Out_writes_(cchFilePath) LPWSTR lpszFilePath, _In_ DWORD cchFilePath, _In_ DWORD dwFlags)
BOOL WINAPI DECLSPEC_HOTPATCH SetProcessPreferredUILanguages(DWORD flags, PCZZWSTR buffer, ULONG *count)
Definition: locale.c:7224
BOOL WINAPI DECLSPEC_HOTPATCH GetProcessPreferredUILanguages(DWORD flags, ULONG *count, WCHAR *buffer, ULONG *size)
Definition: locale.c:6162
LANGID WINAPI DECLSPEC_HOTPATCH GetThreadUILanguage(void)
Definition: thread.c:328
static const WCHAR Cleanup[]
Definition: register.c:80
UNICODE_STRING * PUNICODE_STRING
Definition: env_spec_w32.h:373
struct _UNICODE_STRING UNICODE_STRING
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
@ FileDispositionInformation
Definition: from_kernel.h:74
#define FILE_CREATE
Definition: from_kernel.h:55
#define FILE_OPEN_REPARSE_POINT
Definition: from_kernel.h:46
#define FILE_SYNCHRONOUS_IO_NONALERT
Definition: from_kernel.h:31
Status
Definition: gdiplustypes.h:25
#define WC_NO_BEST_FIT_CHARS
Definition: unicode.h:46
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define OBJ_CASE_INSENSITIVE
Definition: winternl.h:228
@ ProcessImageFileNameWin32
Definition: winternl.h:1925
NTSYSAPI ULONG WINAPI RtlNtStatusToDosError(NTSTATUS)
HRESULT WINAPI RegisterApplicationRecoveryCallback(IN APPLICATION_RECOVERY_CALLBACK pRecoveryCallback, IN PVOID pvParameter OPTIONAL, DWORD dwPingInterval, DWORD dwFlags)
Definition: vista.c:191
HANDLE WINAPI OpenFileById(IN HANDLE hFile, IN LPFILE_ID_DESCRIPTOR lpFileID, IN DWORD dwDesiredAccess, IN DWORD dwShareMode, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes OPTIONAL, IN DWORD dwFlags)
Definition: vista.c:558
BOOLEAN WINAPI CreateSymbolicLinkW(IN LPCWSTR lpSymlinkFileName, IN LPCWSTR lpTargetFileName, IN DWORD dwFlags)
Definition: vista.c:219
BOOL WINAPI QueryFullProcessImageNameW(_In_ HANDLE hProcess, _In_ DWORD dwFlags, _Out_writes_to_(*lpdwSize, *lpdwSize) LPWSTR lpExeName, _Inout_ PDWORD lpdwSize)
Definition: vista.c:29
BOOL WINAPI SetFileBandwidthReservation(IN HANDLE hFile, IN DWORD nPeriodMilliseconds, IN DWORD nBytesPerPeriod, IN BOOL bDiscardable, OUT LPDWORD lpTransferSize, OUT LPDWORD lpNumOutstandingRequests)
Definition: vista.c:524
HRESULT WINAPI RegisterApplicationRestart(IN PCWSTR pwzCommandline OPTIONAL, IN DWORD dwFlags)
Definition: vista.c:206
HRESULT WINAPI GetApplicationRestart(IN HANDLE hProcess, OUT PWSTR pwzCommandline OPTIONAL, IN OUT PDWORD pcchSize, OUT PDWORD pdwFlags OPTIONAL)
Definition: vista.c:153
BOOL WINAPI GetUserPreferredUILanguages(DWORD dwFlags, PULONG pulNumLanguages, PZZWSTR pwszLanguagesBuffer, PULONG pcchLanguagesBuffer)
Definition: vista.c:702
BOOL WINAPI GetThreadPreferredUILanguages(DWORD dwFlags, PULONG pulNumLanguages, PZZWSTR pwszLanguagesBuffer, PULONG pcchLanguagesBuffer)
Definition: vista.c:656
BOOL WINAPI GetSystemPreferredUILanguages(DWORD dwFlags, PULONG pulNumLanguages, PZZWSTR pwszLanguagesBuffer, PULONG pcchLanguagesBuffer)
Definition: vista.c:640
BOOL WINAPI GetFileMUIPath(DWORD dwFlags, PCWSTR pcwszFilePath, PWSTR pwszLanguage, PULONG pcchLanguage, PWSTR pwszFileMUIPath, PULONG pcchFileMUIPath, PULONGLONG pululEnumerator)
Definition: vista.c:603
BOOL WINAPI QueryFullProcessImageNameA(_In_ HANDLE hProcess, _In_ DWORD dwFlags, _Out_writes_to_(*lpdwSize, *lpdwSize) LPSTR lpExeName, _Inout_ PDWORD lpdwSize)
Definition: vista.c:91
BOOL WINAPI SetThreadPreferredUILanguages(DWORD dwFlags, PCZZWSTR pwszLanguagesBuffer, PULONG pulNumLanguages)
Definition: vista.c:735
BOOL WINAPI GetUILanguageInfo(DWORD dwFlags, PCZZWSTR pwmszLanguage, PZZWSTR pwszFallbackLanguages, PDWORD pcchFallbackLanguages, PDWORD pdwAttributes)
Definition: vista.c:684
HRESULT WINAPI GetApplicationRecoveryCallback(IN HANDLE hProcess, OUT APPLICATION_RECOVERY_CALLBACK *pRecoveryCallback, OUT PVOID *ppvParameter, PDWORD dwPingInterval, PDWORD dwFlags)
Definition: vista.c:137
BOOL WINAPI GetFileMUIInfo(DWORD dwFlags, PCWSTR pcwszFilePath, PFILEMUIINFO pFileMUIInfo, DWORD *pcbFileMUIInfo)
Definition: vista.c:587
VOID WINAPI ApplicationRecoveryFinished(IN BOOL bSuccess)
Definition: vista.c:168
BOOLEAN NTAPI CreateSymbolicLinkA(IN LPCSTR lpSymlinkFileName, IN LPCSTR lpTargetFileName, IN DWORD dwFlags)
Definition: vista.c:422
BOOL WINAPI GetFileBandwidthReservation(IN HANDLE hFile, OUT LPDWORD lpPeriodMilliseconds, OUT LPDWORD lpBytesPerPeriod, OUT LPBOOL pDiscardable, OUT LPDWORD lpTransferSize, OUT LPDWORD lpNumOutstandingRequests)
Definition: vista.c:541
#define REPARSE_DATA_BUFFER_HEADER_SIZE
Definition: vista.c:17
DWORD WINAPI GetFinalPathNameByHandleA(IN HANDLE hFile, OUT LPSTR lpszFilePath, IN DWORD cchFilePath, IN DWORD dwFlags)
Definition: vista.c:457
HRESULT WINAPI ApplicationRecoveryInProgress(OUT PBOOL pbCancelled)
Definition: vista.c:179
USHORT LANGID
Definition: mui.h:9
_In_ BOOL _In_ HANDLE hProcess
Definition: mapping.h:71
BOOL * LPBOOL
Definition: minwindef.h:138
BOOL * PBOOL
Definition: minwindef.h:137
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
static LPFILE_ID_DESCRIPTOR
Definition: file.c:37
static DWORD LPSTR PDWORD lpdwSize
Definition: process.c:72
static DWORD LPSTR lpExeName
Definition: process.c:72
#define InitializeObjectAttributes(p, n, a, r, s)
Definition: reg.c:106
_In_ HANDLE hFile
Definition: mswsock.h:90
NTSYSAPI RTL_PATH_TYPE NTAPI RtlDetermineDosPathNameType_U(_In_ PCWSTR Path)
NTSYSAPI BOOLEAN NTAPI RtlDosPathNameToNtPathName_U(_In_opt_z_ PCWSTR DosPathName, _Out_ PUNICODE_STRING NtPathName, _Out_opt_ PCWSTR *NtFileNamePart, _Out_opt_ PRTL_RELATIVE_NAME_U DirectoryInfo)
@ RtlPathTypeRootLocalDevice
Definition: rtltypes.h:472
@ RtlPathTypeDriveRelative
Definition: rtltypes.h:468
@ RtlPathTypeRelative
Definition: rtltypes.h:470
@ RtlPathTypeUncAbsolute
Definition: rtltypes.h:466
@ RtlPathTypeRooted
Definition: rtltypes.h:469
@ RtlPathTypeLocalDevice
Definition: rtltypes.h:471
@ RtlPathTypeDriveAbsolute
Definition: rtltypes.h:467
@ RtlPathTypeUnknown
Definition: rtltypes.h:465
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
#define _Inout_
Definition: no_sal2.h:162
#define _In_
Definition: no_sal2.h:158
#define _Out_writes_to_(s, c)
Definition: no_sal2.h:188
#define SYNCHRONIZE
Definition: nt_native.h:61
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
NTSYSAPI NTSTATUS NTAPI NtSetInformationFile(IN HANDLE hFile, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN PVOID FileInformationBuffer, IN ULONG FileInformationBufferLength, IN FILE_INFORMATION_CLASS FileInfoClass)
Definition: iofunc.c:3096
#define FILE_WRITE_ATTRIBUTES
Definition: nt_native.h:649
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
Definition: obhandle.c:3402
#define DELETE
Definition: nt_native.h:57
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
NTSTATUS NTAPI NtCreateFile(OUT PHANDLE FileHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK IoStatusBlock, IN PLARGE_INTEGER AllocationSize OPTIONAL, IN ULONG FileAttributes, IN ULONG ShareAccess, IN ULONG CreateDisposition, IN ULONG CreateOptions, IN PVOID EaBuffer OPTIONAL, IN ULONG EaLength)
NTSYSAPI NTSTATUS NTAPI NtFsControlFile(IN HANDLE hFile, IN HANDLE hEvent OPTIONAL, IN PIO_APC_ROUTINE IoApcRoutine OPTIONAL, IN PVOID IoApcContext OPTIONAL, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN ULONG DeviceIoControlCode, IN PVOID InBuffer OPTIONAL, IN ULONG InBufferLength, OUT PVOID OutBuffer OPTIONAL, IN ULONG OutBufferLength)
__GNU_EXTENSION typedef unsigned __int64 * PULONGLONG
Definition: ntbasedef.h:395
#define UNICODE_NULL
_NullNull_terminated_ WCHAR * PZZWSTR
Definition: ntbasedef.h:432
_NullNull_terminated_ CONST WCHAR * PCZZWSTR
Definition: ntbasedef.h:433
static OUT PIO_STATUS_BLOCK IoStatusBlock
Definition: pipe.c:75
NTSTATUS NTAPI NtQueryInformationProcess(_In_ HANDLE ProcessHandle, _In_ PROCESSINFOCLASS ProcessInformationClass, _Out_writes_bytes_to_opt_(ProcessInformationLength, *ReturnLength) PVOID ProcessInformation, _In_ ULONG ProcessInformationLength, _Out_opt_ PULONG ReturnLength)
Definition: query.c:211
#define STATUS_INVALID_PARAMETER_2
Definition: ntstatus.h:570
BYTE * PBYTE
Definition: pedump.c:66
DWORD * PDWORD
Definition: pedump.c:68
unsigned short USHORT
Definition: pedump.c:61
#define FSCTL_SET_REPARSE_POINT
Definition: winioctl.h:747
PVOID pBuffer
DWORD BaseSetLastNTError(IN NTSTATUS Status)
Definition: reactos.cpp:167
#define STATUS_BUFFER_TOO_SMALL
Definition: shellext.h:69
PULONG MinorVersion OPTIONAL
Definition: CrossNt.h:68
WCHAR PathBuffer[1]
Definition: shellext.h:176
struct _REPARSE_DATA_BUFFER::@347::@349 SymbolicLinkReparseBuffer
USHORT ReparseDataLength
Definition: shellext.h:166
USHORT MaximumLength
Definition: env_spec_w32.h:370
uint16_t * PWSTR
Definition: typedefs.h:56
uint32_t * PULONG
Definition: typedefs.h:59
const uint16_t * PCWSTR
Definition: typedefs.h:57
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255
#define NTAPI
Definition: typedefs.h:36
ULONG_PTR SIZE_T
Definition: typedefs.h:80
uint32_t * LPDWORD
Definition: typedefs.h:59
int32_t INT
Definition: typedefs.h:58
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
#define IN
Definition: typedefs.h:39
uint16_t * PWCHAR
Definition: typedefs.h:56
uint32_t ULONG
Definition: typedefs.h:59
#define OUT
Definition: typedefs.h:40
#define STATUS_INFO_LENGTH_MISMATCH
Definition: udferr_usr.h:133
#define PROCESS_NAME_NATIVE
Definition: winbase.h:34
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define WINAPI
Definition: msvc.h:6
#define ERROR_PATH_NOT_FOUND
Definition: winerror.h:228
_In_ PCWSTR _Inout_updates_bytes_to_opt_ pcbFileMUIInfo PFILEMUIINFO _Inout_ DWORD * pcbFileMUIInfo
Definition: winnls.h:1123
_In_ PCWSTR _Inout_updates_bytes_to_opt_ pcbFileMUIInfo PFILEMUIINFO pFileMUIInfo
Definition: winnls.h:1122
_In_ PCWSTR pcwszFilePath
Definition: winnls.h:1121
#define IO_REPARSE_TAG_SYMLINK
Definition: iotypes.h:7243
const char * LPCSTR
Definition: xmlstorage.h:183
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
char * LPSTR
Definition: xmlstorage.h:182