A parte e LPSTR y LPCSTR, existen LPTSTR y LPCTSTR, que son -eventualmente- tipos de datos. Las usa Windows para poder diferenciar entre caracteres ASCII normales y Unicode, dependiendo cómo generes tu proyecto. Así, puedes emplear TCHAR, LPTSTR y LPCTSTR (así lo recomienda Microsoft) indistintamente si programas en Unicode o ASCII. A grosso modo, y en resumen, están definidos como
// ASCII
typedef char* LPSTR;
typedef const char* LPCSTR;
// UNICODE
#ifdef _UNICODE
typedef wchar_t* LPTSTR;
typedef const wchar_t* LPCTSTR;
#else
typedef char* LPTSTR;
typedef const char* LPCTSTR;
#endif
Como siempre, LP significa "long pointer", C es para "constante" y la "T" es el sufijo de wchar_t, que es el tipo de dato ESTANDAR definido para caracteres Unicode.