|
No it doesn't display any warnings, thanks for your replys.
|
|
|
|
|
Programm3r wrote: This works aswell ...
...assuming the OP wanted to set the attributes of a file.
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
Hi,
I have an old program without and try/catch statements. Now I'm trying to handle some exceptions . However, I don't want to add any try/catch pieces in the code - it's big work. So, I hope to use a API:
SetUnhandledExceptionFilter()
to handle all exceptions and jump into my handle function. However, the handle function must return one of these:
EXCEPTION_EXECUTE_HANDLER
EXCEPTION_CONTINUE_EXECUTION
EXCEPTION_CONTINUE_SEARCH
This is boring, the exception will still be thrown.
I hope to hide exception in my filter handle function. How can I do that?
|
|
|
|
|
|
|
|
|
please give me some hint
hi
|
|
|
|
|
See this[^] thread does helpful?
|
|
|
|
|
|
I require a monitor tool which does following,
a. attach to a running process
b. list out windows api calls and non-windows function calls with module
name called in order
c. list out what are the function parameters, input to the function,
output from the function, return value from the function
d. changes color if a function is in error state
Do anyone know any such tool exist?
Your knowledge is appreciated
|
|
|
|
|
I dont think you can find this program can you explain why do you need to this program?
|
|
|
|
|
how can i convert ms-word to bmp by program???
|
|
|
|
|
Not sure that you can, except by launching word and doing a screen capture
Christian Graus - Microsoft MVP - C++
Metal Musings - Rex and my new metal blog
"I am working on a project that will convert a FORTRAN code to corresponding C++ code.I am not aware of FORTRAN syntax" ( spotted in the C++/CLI forum )
|
|
|
|
|
Hi,
I am using sendASPI32Command for writing data to CD. But for a particular size of data sendASPI32Command returns SS_ASPI_IS_BUSY error. The error occurs when writes the last track data.
Could u pls tell in which condition this case occurs.Please help..........
AJay
|
|
|
|
|
How can i detect if a user logoffs or switches ?
Thankl you very much...
|
|
|
|
|
Is the ISensLogon interface of any help?
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
How can i do this in Win32API ?
Thank you very much...
|
|
|
|
|
GetDriveType will help you get some of that information, but I doubt you'll be able to easily get more than that.
After all, Win32 doesn't have any knowledge of how the device driver is working between the Write/Open/IoCtl command and its physical workings. Any driver can call CreateDoSdevice et al to create a file endpoint....
Sorry to not give you exact help.
Iain.
|
|
|
|
|
It's not simple but it can be done. I can't give you the code because it's owned by my employers but these basic steps should help you along.
Start by getting the drive type from your drive letter as previously suggested. For USB drives this will always be DRIVE_REMOVABLE or DRIVE_FIXED, anything else and it can be discarded at this stage.
Then you need to open a handle to the Volume with CreateFile and a file name like \\.\E:
(remember to double the slashes when you put this in a C++ string)
You can use the returned device handle to get a VOLUME_DISK_EXTENTS structure for the volume using DeviceIOControl with a IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS control code.
In the Disk Extents structure there is a DiskNumber you can now associate this with the drive letter you started with and remember it.
Now the hard part, is it USB?
The next step is to enumerate all the USB devices attached to the system using SetupDiGetClassDevs with &GUID_DEVCLASS_USB and SetupDiGetClassDevs with &DiskClassGuid to get all the disk devices. For each device use the returned handle to get Device information with SetupDiEnumDeviceInterfaces and SetupDiGetDeviceInterfaceDetail. You end up with a SP_DEVICE_INTERFACE_DETAIL_DATA structure which contains a device path. Open this path with CreateFile which gives you a device handle.
Use the device handle with DeviceIoControl and IOCTL_STORAGE_QUERY_PROPERTY and cast the result to a PSTORAGE_ADAPTER_DESCRIPTOR. This contains a BusType which will be 0x7 for USB
You can use the same device handle you called CreateFile with to do a DeviceIoControl with IOCTL_STORAGE_GET_MEDIA_TYPES_EX. Cast the returned buffer to a PGET_MEDIA_TYPES to get a structure with DeviceType. If DeviceType == FILE_DEVICE_DISK then you have a USB disk but you still don't know which drive letter it corresponds to. To determine this you need to pass the same device handle to DeviceIoControl with IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS and compare the DiskNumber in the result with the pair of DiskNumber and Drive letters that you worked out in the first step.
If this sounds like a joke it is not. I don't know any easier way to do this (took 2 weeks to develop) although I'd like to. You will need some headers from the Windows 2000 or later DDK as well for some of the GUIDS and constants. This will not work before Windows 2000. Good luck
Nothing is exactly what it seems but everything with seems can be unpicked.
|
|
|
|
|
Thank you very much for your great reply effort !
|
|
|
|
|
I'm officially impressed. I knew this would be non-trivial, and didn't think it would actually be possible!
Iain.
|
|
|
|
|
Thanks, It is definitely possible although I can't gaurentee reliability especially in the presence of many and varied dodgy USB devices and exotic drive configurations. USB is such a mess.
I had to implement this and a bit more to auto detect USB drives inserted in a PC and show them by Drive letter. Explorer does this all the time so it should be trivial
Microsoft do so like to make our lives interesting though
Nothing is exactly what it seems but everything with seems can be unpicked.
|
|
|
|
|
This has got me interested!
Explorer doesn't need to go through these conniptions. It just monitors WM_DEVICECHANGE. I just made a quickie MFC app, and added a few lines which detect drives being added and removed:
#include <dbt.h>
...
ON_WM_DEVICECHANGE ()
...
BOOL CMainFrame::OnDeviceChange( UINT nEventType, DWORD dwData )
{
BOOL bReturn = CWnd::OnDeviceChange (nEventType, dwData);
TRACE1("Event %i\n", nEventType);
DEV_BROADCAST_VOLUME *volume = (DEV_BROADCAST_VOLUME *)dwData;
if (nEventType == DBT_DEVICEARRIVAL)
{
if (volume->dbcv_devicetype == DBT_DEVTYP_VOLUME)
{
for (int n = 0; n < 32; n++)
{
if (IsBitSet (volume->dbcv_unitmask, n))
{
TRACE1("Drive %c: Inserted\n", n + 'A');
}
}
}
}
if (nEventType == DBT_DEVICEREMOVECOMPLETE)
{
if (volume->dbcv_devicetype == DBT_DEVTYP_VOLUME)
{
for (int n = 0; n < 32; n++)
{
if (IsBitSet (volume->dbcv_unitmask, n))
{
TRACE1("Drive %c: Removed\n", n + 'A');
}
}
}
}
return bReturn;
}
Which works nicely. I tested on a memory stick which actually adds two partitions. Either yaking it out, or nicely removing using the gizmo on the systray works nicely.
I think I may just turn this into a mini article!
Iain.
|
|
|
|
|