-/* $Id: desktop.c,v 1.9 2004/08/15 19:02:40 chorns Exp $
+/* $Id: desktop.c,v 1.10 2004/09/06 12:00:40 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS system libraries
LPCSTR lpArguments,
LPCSTR lpIconLocation,
INT iIcon,
- LPCSTR lpWorkingDirectory,
+ LPCSTR lpWorkingDirectory, /* Optional */
WORD wHotKey,
INT iShowCmd)
{
- DPRINT1 ("AddDesktopItemA() not implemented!\n");
- return FALSE;
+ UNICODE_STRING ItemName;
+ UNICODE_STRING Arguments;
+ UNICODE_STRING IconLocation;
+ UNICODE_STRING WorkingDirectory;
+ BOOL bResult;
+ NTSTATUS Status;
+
+ Status = RtlCreateUnicodeStringFromAsciiz(&ItemName,
+ (LPSTR)lpItemName);
+ if (!NT_SUCCESS(Status))
+ {
+ SetLastError (RtlNtStatusToDosError (Status));
+ return FALSE;
+ }
+
+ Status = RtlCreateUnicodeStringFromAsciiz(&Arguments,
+ (LPSTR)lpArguments);
+ if (!NT_SUCCESS(Status))
+ {
+ RtlFreeUnicodeString(&ItemName);
+ SetLastError (RtlNtStatusToDosError (Status));
+ return FALSE;
+ }
+
+ Status = RtlCreateUnicodeStringFromAsciiz(&IconLocation,
+ (LPSTR)lpIconLocation);
+ if (!NT_SUCCESS(Status))
+ {
+ RtlFreeUnicodeString(&Arguments);
+ RtlFreeUnicodeString(&ItemName);
+ SetLastError (RtlNtStatusToDosError (Status));
+ return FALSE;
+ }
+
+ if (lpWorkingDirectory != NULL)
+ {
+ Status = RtlCreateUnicodeStringFromAsciiz(&WorkingDirectory,
+ (LPSTR)lpWorkingDirectory);
+ if (!NT_SUCCESS(Status))
+ {
+ RtlFreeUnicodeString(&IconLocation);
+ RtlFreeUnicodeString(&Arguments);
+ RtlFreeUnicodeString(&ItemName);
+ SetLastError (RtlNtStatusToDosError (Status));
+ return FALSE;
+ }
+ }
+
+ bResult = AddDesktopItemW(bCommonItem,
+ ItemName.Buffer,
+ Arguments.Buffer,
+ IconLocation.Buffer,
+ iIcon,
+ (lpWorkingDirectory != NULL) ? WorkingDirectory.Buffer : NULL,
+ wHotKey,
+ iShowCmd);
+
+ if (lpWorkingDirectory != NULL)
+ {
+ RtlFreeUnicodeString(&WorkingDirectory);
+ }
+
+ RtlFreeUnicodeString(&IconLocation);
+ RtlFreeUnicodeString(&Arguments);
+ RtlFreeUnicodeString(&ItemName);
+
+ return bResult;
}
LPCWSTR lpArguments,
LPCWSTR lpIconLocation,
INT iIcon,
- LPCWSTR lpWorkingDirectory,
+ LPCWSTR lpWorkingDirectory, /* Optional */
WORD wHotKey,
INT iShowCmd)
{
DPRINT ("szCommand: '%S'\n", szCommand);
DPRINT ("szArguments: '%S'\n", szArguments);
- /* dynamically load ole32.dll */
- if(!LoadDynamicImports(&DynOle32, &Ole32))
- {
- DPRINT1("USERENV: Unable to load OLE32.DLL\n");
- return FALSE;
- }
+ /* Dynamically load ole32.dll */
+ if (!LoadDynamicImports(&DynOle32, &Ole32))
+ {
+ DPRINT1("USERENV: Unable to load OLE32.DLL\n");
+ return FALSE;
+ }
Ole32.fn.CoInitialize(NULL);
DeleteDesktopItemA (BOOL bCommonItem,
LPCSTR lpItemName)
{
- DPRINT1 ("DeleteDesktopItemA() not implemented!\n");
- return FALSE;
+ UNICODE_STRING ItemName;
+ BOOL bResult;
+ NTSTATUS Status;
+
+ Status = RtlCreateUnicodeStringFromAsciiz(&ItemName,
+ (LPSTR)lpItemName);
+ if (!NT_SUCCESS(Status))
+ {
+ SetLastError (RtlNtStatusToDosError (Status));
+ return FALSE;
+ }
+
+ bResult = DeleteDesktopItemW(bCommonItem,
+ ItemName.Buffer);
+
+ RtlFreeUnicodeString(&ItemName);
+
+ return bResult;
}
CreateGroupA (LPCSTR lpGroupName,
BOOL bCommonGroup)
{
- DPRINT1 ("CreateGroupA() not implemented!\n");
- return FALSE;
+ UNICODE_STRING GroupName;
+ BOOL bResult;
+ NTSTATUS Status;
+
+ Status = RtlCreateUnicodeStringFromAsciiz(&GroupName,
+ (LPSTR)lpGroupName);
+ if (!NT_SUCCESS(Status))
+ {
+ SetLastError (RtlNtStatusToDosError (Status));
+ return FALSE;
+ }
+
+ bResult = CreateGroupW(GroupName.Buffer, bCommonGroup);
+
+ RtlFreeUnicodeString(&GroupName);
+
+ return bResult;
}
DeleteGroupA (LPCSTR lpGroupName,
BOOL bCommonGroup)
{
- DPRINT1 ("DeleteGroupA() not implemented!\n");
- return FALSE;
+ UNICODE_STRING GroupName;
+ BOOL bResult;
+ NTSTATUS Status;
+
+ Status = RtlCreateUnicodeStringFromAsciiz(&GroupName,
+ (LPSTR)lpGroupName);
+ if (!NT_SUCCESS(Status))
+ {
+ SetLastError (RtlNtStatusToDosError (Status));
+ return FALSE;
+ }
+
+ bResult = DeleteGroupW(GroupName.Buffer, bCommonGroup);
+
+ RtlFreeUnicodeString(&GroupName);
+
+ return bResult;
}
BOOL WINAPI
-AddItemA (LPCSTR lpGroupName,
+AddItemA (LPCSTR lpGroupName, /* Optional */
BOOL bCommonGroup,
LPCSTR lpItemName,
LPCSTR lpArguments,
LPCSTR lpIconLocation,
INT iIcon,
- LPCSTR lpWorkingDirectory,
+ LPCSTR lpWorkingDirectory, /* Optional */
WORD wHotKey,
INT iShowCmd)
{
- DPRINT1 ("AddItemA() not implemented!\n");
- return FALSE;
+ UNICODE_STRING GroupName;
+ UNICODE_STRING ItemName;
+ UNICODE_STRING Arguments;
+ UNICODE_STRING IconLocation;
+ UNICODE_STRING WorkingDirectory;
+ BOOL bResult;
+ NTSTATUS Status;
+
+ Status = RtlCreateUnicodeStringFromAsciiz(&ItemName,
+ (LPSTR)lpItemName);
+ if (!NT_SUCCESS(Status))
+ {
+ SetLastError (RtlNtStatusToDosError (Status));
+ return FALSE;
+ }
+
+ Status = RtlCreateUnicodeStringFromAsciiz(&Arguments,
+ (LPSTR)lpArguments);
+ if (!NT_SUCCESS(Status))
+ {
+ RtlFreeUnicodeString(&ItemName);
+ SetLastError (RtlNtStatusToDosError (Status));
+ return FALSE;
+ }
+
+ Status = RtlCreateUnicodeStringFromAsciiz(&IconLocation,
+ (LPSTR)lpIconLocation);
+ if (!NT_SUCCESS(Status))
+ {
+ RtlFreeUnicodeString(&Arguments);
+ RtlFreeUnicodeString(&ItemName);
+ SetLastError (RtlNtStatusToDosError (Status));
+ return FALSE;
+ }
+
+ if (lpGroupName != NULL)
+ {
+ Status = RtlCreateUnicodeStringFromAsciiz(&GroupName,
+ (LPSTR)lpGroupName);
+ if (!NT_SUCCESS(Status))
+ {
+ RtlFreeUnicodeString(&IconLocation);
+ RtlFreeUnicodeString(&Arguments);
+ RtlFreeUnicodeString(&ItemName);
+ SetLastError (RtlNtStatusToDosError (Status));
+ return FALSE;
+ }
+ }
+
+ if (lpWorkingDirectory != NULL)
+ {
+ Status = RtlCreateUnicodeStringFromAsciiz(&WorkingDirectory,
+ (LPSTR)lpWorkingDirectory);
+ if (!NT_SUCCESS(Status))
+ {
+ if (lpGroupName != NULL)
+ {
+ RtlFreeUnicodeString(&GroupName);
+ }
+ RtlFreeUnicodeString(&IconLocation);
+ RtlFreeUnicodeString(&Arguments);
+ RtlFreeUnicodeString(&ItemName);
+ SetLastError (RtlNtStatusToDosError (Status));
+ return FALSE;
+ }
+ }
+
+ bResult = AddItemW((lpGroupName != NULL) ? GroupName.Buffer : NULL,
+ bCommonGroup,
+ ItemName.Buffer,
+ Arguments.Buffer,
+ IconLocation.Buffer,
+ iIcon,
+ (lpWorkingDirectory != NULL) ? WorkingDirectory.Buffer : NULL,
+ wHotKey,
+ iShowCmd);
+
+ if (lpGroupName != NULL)
+ {
+ RtlFreeUnicodeString(&GroupName);
+ }
+
+ if (lpWorkingDirectory != NULL)
+ {
+ RtlFreeUnicodeString(&WorkingDirectory);
+ }
+
+ RtlFreeUnicodeString(&IconLocation);
+ RtlFreeUnicodeString(&Arguments);
+ RtlFreeUnicodeString(&ItemName);
+
+ return bResult;
}
BOOL WINAPI
-AddItemW (LPCWSTR lpGroupName,
+AddItemW (LPCWSTR lpGroupName, /* Optional */
BOOL bCommonGroup,
LPCWSTR lpItemName,
LPCWSTR lpArguments,
LPCWSTR lpIconLocation,
INT iIcon,
- LPCWSTR lpWorkingDirectory,
+ LPCWSTR lpWorkingDirectory, /* Optional */
WORD wHotKey,
INT iShowCmd)
{
DPRINT ("szCommand: '%S'\n", szCommand);
DPRINT ("szArguments: '%S'\n", szArguments);
- /* dynamically load ole32.dll */
- if(!LoadDynamicImports(&DynOle32, &Ole32))
- {
- DPRINT1("USERENV: Unable to load OLE32.DLL\n");
- return FALSE;
- }
+ /* Dynamically load ole32.dll */
+ if (!LoadDynamicImports(&DynOle32, &Ole32))
+ {
+ DPRINT1("USERENV: Unable to load OLE32.DLL\n");
+ return FALSE;
+ }
Ole32.fn.CoInitialize(NULL);
BOOL WINAPI
-DeleteItemA (LPCSTR lpGroupName,
+DeleteItemA (LPCSTR lpGroupName, /* Optional */
BOOL bCommonGroup,
LPCSTR lpItemName,
BOOL bDeleteGroup)
{
- DPRINT1 ("DeleteItemA() not implemented!\n");
- return FALSE;
+ UNICODE_STRING GroupName;
+ UNICODE_STRING ItemName;
+ BOOL bResult;
+ NTSTATUS Status;
+
+ if (lpGroupName != NULL)
+ {
+ Status = RtlCreateUnicodeStringFromAsciiz(&GroupName,
+ (LPSTR)lpGroupName);
+ if (!NT_SUCCESS(Status))
+ {
+ SetLastError (RtlNtStatusToDosError (Status));
+ return FALSE;
+ }
+ }
+
+ Status = RtlCreateUnicodeStringFromAsciiz(&ItemName,
+ (LPSTR)lpItemName);
+ if (!NT_SUCCESS(Status))
+ {
+ if (lpGroupName != NULL)
+ {
+ RtlFreeUnicodeString(&GroupName);
+ }
+
+ SetLastError (RtlNtStatusToDosError (Status));
+ return FALSE;
+ }
+
+ bResult = DeleteItemW((lpGroupName != NULL) ? GroupName.Buffer : NULL,
+ bCommonGroup,
+ ItemName.Buffer,
+ bDeleteGroup);
+
+ RtlFreeUnicodeString(&ItemName);
+ if (lpGroupName != NULL)
+ {
+ RtlFreeUnicodeString(&GroupName);
+ }
+
+ return bResult;
}
BOOL WINAPI
-DeleteItemW (LPCWSTR lpGroupName,
+DeleteItemW (LPCWSTR lpGroupName, /* Optional */
BOOL bCommonGroup,
LPCWSTR lpItemName,
BOOL bDeleteGroup)