You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
145 lines
3.5 KiB
145 lines
3.5 KiB
/* Copyright (c) 1996, Microsoft Corporation, all rights reserved
|
|
**
|
|
** rnk.c
|
|
** Remote Access shortcut file (.RNK) library
|
|
**
|
|
** 02/15/96 Steve Cobb
|
|
*/
|
|
|
|
#include <windows.h> // Win32 core
|
|
#include <debug.h> // TRACE/ASSERT macros
|
|
#include <nouiutil.h> // Heap macros
|
|
#include <rnk.h> // Our public header
|
|
|
|
|
|
VOID
|
|
FreeRnkInfo(
|
|
IN RNKINFO* pInfo )
|
|
|
|
/* Destroys 'pInfo' buffer returned from ReadShortcutFile.
|
|
*/
|
|
{
|
|
if (pInfo)
|
|
{
|
|
Free0( pInfo->pszEntry );
|
|
Free0( pInfo->pszPhonebook );
|
|
Free( pInfo );
|
|
}
|
|
}
|
|
|
|
|
|
RNKINFO*
|
|
ReadShortcutFile(
|
|
IN TCHAR* pszRnkPath )
|
|
|
|
/* Reads shortcut file at 'pszRnkPath' returning a RNKINFO buffer. Caller
|
|
** should eventually call FreeRnkInfo on the returned buffer.
|
|
**
|
|
** Returns 0 or an error code.
|
|
*/
|
|
{
|
|
RNKINFO* pInfo;
|
|
TCHAR szBuf[ 1024 ];
|
|
|
|
TRACE("ReadShortcutFile");
|
|
|
|
pInfo = (RNKINFO* )Malloc( sizeof(RNKINFO) );
|
|
if (!pInfo)
|
|
return NULL;
|
|
|
|
ZeroMemory( pInfo, sizeof(*pInfo) );
|
|
|
|
GetPrivateProfileString( TEXT(RNK_SEC_Main), TEXT(RNK_KEY_Entry),
|
|
TEXT(""), szBuf, sizeof(szBuf) / sizeof(TCHAR), pszRnkPath );
|
|
pInfo->pszEntry = StrDup( szBuf );
|
|
|
|
GetPrivateProfileString( TEXT(RNK_SEC_Main), TEXT(RNK_KEY_Phonebook),
|
|
TEXT(""), szBuf, sizeof(szBuf) / sizeof(TCHAR), pszRnkPath );
|
|
pInfo->pszPhonebook = StrDup( szBuf );
|
|
|
|
return pInfo;
|
|
}
|
|
|
|
|
|
|
|
DWORD
|
|
WriteShortcutFile(
|
|
IN TCHAR* pszRnkPath,
|
|
IN TCHAR* pszPbkPath,
|
|
IN TCHAR* pszEntry )
|
|
|
|
/* Write the shortcut file 'pszRnkPath' with a command line to dial entry
|
|
** 'pszEntry' from phonebook 'pszPath'.
|
|
**
|
|
** Returns 0 if succesful or an error code.
|
|
*/
|
|
{
|
|
DWORD dwErr;
|
|
HANDLE hFile;
|
|
CHAR* pszRnkPathA;
|
|
CHAR* pszEntryA;
|
|
CHAR* pszPbkPathA;
|
|
|
|
TRACE("WriteShortcutFile");
|
|
|
|
/* The file is written in ANSI to
|
|
** avoid potential portability/compatibility problems with Windows 95.
|
|
*/
|
|
dwErr = 0;
|
|
|
|
pszRnkPathA = StrDupAFromT( pszRnkPath );
|
|
if (!pszRnkPathA)
|
|
{
|
|
dwErr = ERROR_NOT_ENOUGH_MEMORY;
|
|
}
|
|
else
|
|
{
|
|
hFile = CreateFileA( pszRnkPathA, GENERIC_WRITE, 0, NULL,
|
|
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
|
|
|
|
if (hFile == INVALID_HANDLE_VALUE)
|
|
{
|
|
dwErr = GetLastError();
|
|
}
|
|
else
|
|
{
|
|
CloseHandle( hFile );
|
|
|
|
pszEntryA = StrDupAFromT( pszEntry );
|
|
pszPbkPathA = StrDupAFromT( pszPbkPath );
|
|
|
|
if (!pszEntryA || !pszPbkPathA)
|
|
{
|
|
dwErr = ERROR_NOT_ENOUGH_MEMORY;
|
|
}
|
|
else
|
|
{
|
|
BOOL f;
|
|
CHAR szBuf[ (2 * MAX_PATH) + 100 ];
|
|
CHAR* pszKey;
|
|
|
|
ZeroMemory( szBuf, sizeof(szBuf) );
|
|
|
|
pszKey = szBuf;
|
|
wsprintfA( pszKey, "%s=%s",
|
|
RNK_KEY_Entry, pszEntryA );
|
|
|
|
pszKey += lstrlenA( pszKey ) + 1;
|
|
wsprintfA( pszKey, "%s=%s",
|
|
RNK_KEY_Phonebook, pszPbkPathA );
|
|
|
|
f = WritePrivateProfileSectionA(
|
|
RNK_SEC_Main, szBuf, pszRnkPathA );
|
|
if (!f)
|
|
dwErr = GetLastError();
|
|
}
|
|
|
|
Free0( pszPbkPathA );
|
|
Free0( pszEntryA );
|
|
}
|
|
|
|
Free( pszRnkPathA );
|
|
}
|
|
|
|
return dwErr;
|
|
}
|