/*********************************************************************** * DelNodeRunDLL32W (ADVPACK.@) * * Deletes a file or directory, WinMain style. * * PARAMS * hWnd [I] Handle to the window used for the display. * hInst [I] Instance of the process. * cmdline [I] Contains parameters in the order FileOrDirName,Flags. * show [I] How the window should be shown. * * RETURNS * Success: S_OK. * Failure: E_FAIL. */ HRESULT WINAPI DelNodeRunDLL32W(HWND hWnd, HINSTANCE hInst, LPWSTR cmdline, INT show) { LPWSTR szFilename, szFlags; LPWSTR cmdline_copy, cmdline_ptr; DWORD dwFlags = 0; HRESULT res; TRACE("(%p, %p, %s, %i)\n", hWnd, hInst, debugstr_w(cmdline), show); cmdline_copy = HeapAlloc(GetProcessHeap(), 0, (lstrlenW(cmdline) + 1) * sizeof(WCHAR)); cmdline_ptr = cmdline_copy; lstrcpyW(cmdline_copy, cmdline); /* get the parameters at indexes 0 and 1 respectively */ szFilename = get_parameter(&cmdline_ptr, ',', TRUE); szFlags = get_parameter(&cmdline_ptr, ',', TRUE); if (szFlags) dwFlags = atolW(szFlags); res = DelNodeW(szFilename, dwFlags); HeapFree(GetProcessHeap(), 0, cmdline_copy); return res; }
/*********************************************************************** * DelNodeA (ADVPACK.@) * * See DelNodeW. */ HRESULT WINAPI DelNodeA(LPCSTR pszFileOrDirName, DWORD dwFlags) { UNICODE_STRING fileordirname; HRESULT res; TRACE("(%s, %d)\n", debugstr_a(pszFileOrDirName), dwFlags); RtlCreateUnicodeStringFromAsciiz(&fileordirname, pszFileOrDirName); res = DelNodeW(fileordirname.Buffer, dwFlags); RtlFreeUnicodeString(&fileordirname); return res; }
/* Advanced INF callbacks */ static HRESULT del_dirs_callback(HINF hinf, PCWSTR field, const void *arg) { INFCONTEXT context; HRESULT hr = S_OK; DWORD size; BOOL ok = SetupFindFirstLineW(hinf, field, NULL, &context); for (; ok; ok = SetupFindNextLine(&context, &context)) { WCHAR directory[MAX_INF_STRING_LENGTH]; if (!SetupGetLineTextW(&context, NULL, NULL, NULL, directory, MAX_INF_STRING_LENGTH, &size)) continue; if (DelNodeW(directory, ADN_DEL_IF_EMPTY) != S_OK) hr = E_FAIL; } return hr; }